我有模型
public class PersonViewModel
{
public Guid Id { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
}它嵌套在其他视图模型中:
public class ApprovalModel
{
[UIHint("MyDisplayTemplate")]
public PersonViewModel User { get; set; }
[Required]
public bool? Approve { get; set; }
}在Views -> Shared -> DisplayTemplates下,我有一个模板MyDisplayTemplate.ascx
在我的视图ApprovalModel视图中,我使用以下行,它显示了嵌套的模型:
<div class="display-field"> <%: Html.DisplayFor(model => model.User) %> </div>在我的控制器里,我有一个动作
[HttpPost]
public virtual ActionResult ApproveRequest(ApprovalModel vm)
{
//access bound vm.User here
}有没有一种简单的方法将嵌套的模型绑定回post请求?或者我还能做些什么来把它绑定回去?
谢谢
发布于 2010-10-21 23:00:00
将视图模型保存在会话中,并将id呈现为隐藏字段。然后,post操作可以从会话中检索模型,或者在模型不存在的情况下通过id加载模型。
视图:
<%: Html.HiddenFor(x => x.Id) %>控制器:
[HttpPost]
public virtual ActionResult ApproveRequest(int id)
{
//access bound vm.User here
}发布于 2010-10-21 20:10:43
您需要在显示模板中输入字段:
<%: Html.HiddenFor(x => x.Id) %>
<%: Html.LabelFor(x => x.Firstname) %>
<%: Html.TextBoxFor(x => x.Firstname) %>
<br/>
<%: Html.LabelFor(x => x.Lastname) %>
<%: Html.TextBoxFor(x => x.Lastname) %>在您的控制器操作中,指示用户前缀,以便模型绑定器能够正确识别请求值并将它们绑定到ApprovalModel。
[HttpPost]
public ActionResult ApproveRequest([Bind(Prefix = "User")] ApprovalModel vm)此外,编辑器模板似乎更适合于生成表单和输入域(<%: Html.EditorFor(model => model.User) %>),而不是显示模板。
发布于 2010-10-22 01:28:15
您不需要将文件放入文本框中,只需将其放入一些输入字段中,因此当页面回发时,这些值将被发送回服务器。因此,只需使用HiddenFor(....)对于要在回发时恢复的每个字段
https://stackoverflow.com/questions/3987228
复制相似问题