2012-05-08 58 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屬性是否相同,這將支持我的理論。

祝你好運!