我创建了一个自定义帮助程序来管理我的单选按钮。它允许我点击标签来选择相应的单选按钮。它的工作原理,但我发现它不再工作的情况。只有在第一次加载jQuery UI对话框时,与单选按钮正确关联的标签
这里是场景:第一次加载jQuery UI对话框,我可以点击标签来选择相应的单选按钮。我必须说我的单选按钮被加载到jQuery对话框中的表单中。
问题发生,如果我关闭然后重新打开jQuery的对话框,然后我的标签不再与单选按钮相关的(但一切都运行得很好,只是点)。
这是帮助我的代码:
public static MvcHtmlString RadioButtonFor2<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object value, object labelText)
{
object currentValue = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData).Model;
string nameX = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData).DisplayName;
string uniqueId = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData).DisplayName + "_" + value;
TagBuilder htmlRadio = new TagBuilder("input");
htmlRadio.MergeAttribute("type", "radio");
htmlRadio.MergeAttribute("id", uniqueId);
htmlRadio.MergeAttribute("name", nameX);
htmlRadio.MergeAttribute("value", (string)value);
if (currentValue != null && value.ToString() == currentValue.ToString()) htmlRadio.MergeAttribute("checked", "checked");
TagBuilder htmlLabel = new TagBuilder("label");
htmlLabel.MergeAttribute("for", uniqueId);
htmlLabel.SetInnerText((string)labelText);
return MvcHtmlString.Create(htmlRadio.ToString(TagRenderMode.SelfClosing) + htmlLabel.ToString());
}
这段代码产生这样的html代码:
<input name="ADR" id="ADR_Yes" type="radio" value="Yes"/>
<label for="ADR_Yes">Oui</label>
正如你可以看到标签正确地输入有关。
有人有任何想法,为什么它只有在第一次加载jQuery UI dialod?
我有点失落。
谢谢。
您不应该需要一个自定义助手才能将标签与其输入相关联。 'LabelFor'和'RadioButtonFor'应该自动执行此操作。另外,如果没有ASP.NET MVC,你能重现吗? (例如在jsfiddle.net中) – 2012-03-03 17:41:54
它不适用于ASP.NET MVC。 LabelFor帮助程序不会生成具有唯一ID的html代码。例如:如果您有一个'是'的单选按钮,另一个''没有与'ADR'模型属性相关,那么您将拥有两个相同的ID,因此它不起作用。这个问题是已知的。 – Bronzato 2012-03-03 17:46:31
你是通过ajax加载对话框内容吗? – 2012-03-03 18:17:38