2012-03-03 32 views
1

我创建了一个自定义帮助程序来管理我的单选按钮。它允许我点击标签来选择相应的单选按钮。它的工作原理,但我发现它不再工作的情况。只有在第一次加载jQuery UI对话框时,与单选按钮正确关联的标签

这里是场景:第一次加载jQuery UI对话框,我可以点击标签来选择相应的单选按钮。我必须说我的单选按钮被加载到jQuery对话框中的表单中。

问题发生,如果我关闭然后重新打开jQuery的对话框,然后我的标签不再与单选按钮相关的(但一切都运行得很好,只是点)。

enter image description here

这是帮助我的代码:

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?

我有点失落。

谢谢。

+0

您不应该需要一个自定义助手才能将标签与其输入相关联。 'LabelFor'和'RadioButtonFor'应该自动执行此操作。另外,如果没有ASP.NET MVC,你能重现吗? (例如在jsfiddle.net中) – 2012-03-03 17:41:54

+0

它不适用于ASP.NET MVC。 LabelFor帮助程序不会生成具有唯一ID的html代码。例如:如果您有一个'是'的单选按钮,另一个''没有与'ADR'模型属性相关,那么您将拥有两个相同的ID,因此它不起作用。这个问题是已知的。 – Bronzato 2012-03-03 17:46:31

+0

你是通过ajax加载对话框内容吗? – 2012-03-03 18:17:38

回答

0

我终于找到了一个解决方案:

每当我需要关闭jQuery的对话,我必须完全从DOM摧毁它。

我换成这一行:

$(this).dialog('close'); 

下列要求:

$(this).dialog('destroy').remove(); 

也许这可以帮助别人。

0

在ajax成功中重新绑定您的无线电处理程序。当你调用它第一次将只致力于现有元素当时

+0

我该怎么做?绑定这样一个事实,即当我点击'标签'时,必须选择关联的单选按钮。我没有任何背后的代码。谢谢。 – Bronzato 2012-03-03 19:11:13

+0

如果没有代码背后它将不得不看到问题生活,问题没有意义,除非脚本正在改变一个对话框不会只是通过关闭 – charlietfl 2012-03-03 19:14:00

+0

我希望有人已经遇到这个问题可以帮助我。 – Bronzato 2012-03-03 21:20:53

相关问题