2012-05-08 31 views
1

我有2个嵌套的局部控制多实例

用户控制1:

Html.BeginRouteForm 
(
    Html.RenderPartial (path of child form) 
) 

ChildControl:

Html.LabelFor(x=>x.FirstName,"First Name") 
Html.TextBoxFor(x=>x.FirstName) 
... 

问题:

我有2实例这个部分控制在主页上。当我点击第二个实例的提交按钮时,表单使用AJAX & JQuery发布。由于FirstName具有所需的约束,因此表单会为FirstName触发所需的验证。问题出在这里:当我点击标签“First Name”时,光标会聚焦在部分表单的第一个实例的名字TextBox上,而不是第二个实例的验证触发。

有关如何解决这个问题的任何建议? 非常感谢!

回答

2

在猜测,我会说你是一个重复的ID的受害者,因为ChildControl的两个实例可能产生相同的ID字符串。

与ASPNET不同,MVC似乎在本地生成ID。换句话说,幕后的任何东西都不会记录生成了多少“控件”,这就是ASPNET生成唯一ID的原因。

如果是这样,这是一个很容易解决的问题。只需添加您自己的ID,以ChildControl的每个实例,做类似以下内容:

@Html.TextBox("rel_date", Model.Value.rel_date.ToSiteString(), new { @class = "date-picker", style = "width: 75px;", id = "" }) 

在这里,我居然抑制上一个文本框,我通过传递一个空ID值在HTML属性生成的ID TextBox助手调用的参数。你会插入一些你知道是唯一的ID。

BTW,您可以快速检查,看看如果我说得对,通过检查页面生成的HTML的重复的ID。当它在IE中刚刚点击F12时(无论如何IE9)。这将打开一个窗口,允许您浏览生成页面的html。你可以阅读它,看看两个文本框的ID属性是否相同,这将支持我的理论。

祝你好运!