【发布时间】:2015-02-03 19:05:44
【问题描述】:
这主要是对本期评论的跟进,但我没有足够的声誉来发表评论......
ASP.Net MVC Postback a label value to your controller
假设我有一个简单的模型:
public class SimpleClass
{
public String Label { get; set; }
public String FirstName { get; set; }
}
标签是根据用户/客户端更改的,因此它不能是 DataAttribute。如果回发时出现处理问题,我们需要重新绘制整个页面。这是上一篇文章问题的症结所在。公认的解决方案是这样做:
@Html.DisplayTextFor(model => model.Label)
@Html.HiddenFor(model => model.Label)
@Html.EditorFor(model => model.FirstName)
这是有道理的,因为它有效。但是我们的模型更加复杂和广泛。这种方法会导致大量隐藏字段,这似乎是一个非常肮脏的解决方案。
这让我想到了 JP 的评论:
ASP.Net MVC Postback a label value to your controller
解决方案是重新加载模型。但这不仅仅是重新加载,也是合并,因为您希望保留任何客户端数据更改。
default: SimpleClass { Label="TheLabel", FirstName="Rob"}
postedback: SimpleClass { Label="", FirstName="Steve" }
we want: SimpleClass { Label="TheLabel", "FirstName="Steve" }
我的问题是 MVC 是否有一个好方法可以知道哪些字段被回发以便正确合并?我们只需要合并回发字段而不是空白属性。
还是只 ajaxify 整个回发而不提交表单更好?这避免了提交时的所有模型重新加载问题。
更新
为了表扬 Pablo,我接受了他的解决方案。要查看他的解决方案的简单示例,请查看 Robert Harvey 在以下答案中的评论:
【问题讨论】:
-
这是一个很好的问题。我总是对我的模特不能永远活着感到沮丧。我似乎缺少了什么。
标签: c# asp.net-mvc model-binding