Iva*_*tin 7 razor asp.net-mvc-3
我有与ASP.NET MVC部分视图一样大致相同的问题:输入名称前缀
我想为这些数据实体创建CRUD操作:
public class UserViewModel
{
protected virtual Id {get; set;}
public virtual string Login { get; set; }
public virtual string Password { get; set; }
public virtual ZipCodeViewModel ZipCode { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
邮政编码实体:
public class ZipCodeViewModel
{
public virtual string City { get; set; }
public virtual string State { get; set; }
public virtual string Zip { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我也有部分视图ZipCode使用UserViewModel.ZipCode:
@model ZipCodeViewModel
@Html.TextBoxFor(x => x.Zip, new { id = "ZipCode", name = "ZipCode.Zip", maxlength = "5" })
Run Code Online (Sandbox Code Playgroud)
我将在另一个页面(例如用户)中使用ZipCodePartialView.
@model UserViewModel
.....
@{Html.RenderPartial("Zipcode", Model.ZipCode);}
Run Code Online (Sandbox Code Playgroud)
当MVC保存用户ZipCode字段Zip为空时.
那么问题是我如何在patrial View中添加模型前缀?
bre*_*eez 14
试试这个扩展:
public static void RenderPartialWithPrefix(this HtmlHelper helper, string partialViewName, object model, string prefix)
{
helper.RenderPartial(partialViewName,
model,
new ViewDataDictionary { TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = prefix } });
}
Run Code Online (Sandbox Code Playgroud)
Sea*_*ver 10
而不是使用Html.RenderPartial()将您的局部视图放在Shared/EditorTemplates /中,并将其命名为类型的名称(在本例中ZipCodeViewModel).然后,您可以使用Html.EditorFor()表达式中的属性传递.EditorFor()正确填充字段前缀,以便MVC中的模型绑定器可以正确地放置数据.
所以这样的事情
@model UserViewModel
.....
@Html.EditorFor(m => m.ZipCode);
Run Code Online (Sandbox Code Playgroud)
我会尝试挖掘一些链接和资源,但希望能为你找到答案.
编辑:这篇博文似乎超越了EditorFor()扩展和EditorTempaltes的基础知识:关于ASP.NET MVC的快速提示:编辑器Tempaltes
无论如何,当您使用这些Html.TextBoxFor()或Html.DropDownFor()扩展时,他们所做的是从您传入的表达式中获取属性的全名,并将HTML输入元素的名称和id属性设置为该属性.示例可能是:
@Html.TextBoxFor(m => m.Person.FirstName)
Run Code Online (Sandbox Code Playgroud)
会呈现
<input id="Person_FirstName" name="Person.FirstName" type="text" value="<what ever was in FirstName>" />
Run Code Online (Sandbox Code Playgroud)
这些输入名称和值是后期数据中的键/值对.默认的ASP.NET MVC模型绑定器会尝试将这些键与控制器操作所采用的模型进行匹配.如果找到匹配项,则会设置该值.
所以你上面的问题可能是因为你的局部视图中的输入名称来自ZipCodeViewModel向下,但是你的行动正在接受UserViewModel.该EditorFor()前缀为您的名字,因此它可以基本上呈现将发布可绑定你的数据备份的局部视图.虽然您可以在输入元素上自己设置名称属性(或者按照您在评论中的建议展平所有内容),但是这些帮助程序会为您执行此操作.
我希望这有助于解释正在发生的事情以及可能的解决方案.
| 归档时间: |
|
| 查看次数: |
8182 次 |
| 最近记录: |