當使用Razor爲具有子模型的複雜模型渲染表單時,我們通常會使用局部視圖呈現子模型。剃刀局部視圖前綴字段名稱
簡單的例子型號:
public class BlogPost
{
public string Content { get; set; }
public List<Comment> Comments { get; set; }
}
public class Comment
{
public string Content { get; set; }
}
BlogPost.cshtml:
@model BlogPost
@Html.TextAreaFor(x => x.Content)
@for (int i = 0; i < Model.Comments.Count; i++)
{
@Html.Partial('Comment', Model.Comments[i])
}
Comment.cshtml:
@model Comment
@Html.TextAreaFor(x => x.Content)
現在的問題:
假設我們要將所有字段的值發送到以BlogPost
作爲參數的控制器操作。中的字段將被回發到控制器像這樣:
含量= +的+博文&含量的+含量+ =的+第一+評論&含量=所述+第二+評論
但
內容= +的+博客帖子&評論[0] =。內容的第一+ +評論&的+含量+:我們需要有MVC正確映射他們的BlogPost
視圖模型,我們需要這個命名約定什麼評論[1] .Content =第二+評論
如何以乾淨的方式實現這一目標?我們只能認爲哪種方式似乎都妥協設計:
- 要麼我們通過
BlogPost
作爲模型的局部視圖,使得我們可以定義像這樣的文本區域:@Html.TextAreaFor(x => x.Comments[i].Content)
。但是這意味着我們將註釋的部分視圖耦合到父視圖模型 - 您可以考慮在不同的上下文中使用相同的部分視圖的情況,如果部分視圖依賴於父視圖模型,則這是不可能的。此外,i
將不得不以某種方式傳遞給部分視圖。 - 或者我們回到明確定義每個字段的字符串的名稱:
@Html.TextArea(ViewBag.Prefix + ".Content")
。
有什麼辦法告訴部分視圖應用某個前綴到所有的字段名?
感謝,EditorFor是關鍵!也很高興閱讀一些史蒂文桑德森關於如何處理新行的提示。 – chiccodoro 2012-07-19 07:23:33
chiccodoro - 很高興解決了你的問題。史蒂文桑德森的東西比我cvan說的更多次地拯救了我的燻肉。 – 2012-07-19 07:47:24