【发布时间】:2014-12-20 18:28:15
【问题描述】:
我有一个看起来像这样的模型:
[Serializable]
public class Question : RatingItem, IQuestion, IXmlSerializable
{
// ...
public int TextRows { get; set; }
当我通过帖子将其发送回控制器时,Fiddler 将其捕获如下:
...Question.TextRows=44...
但是在我的控制器的第一行,我的断点说这个值为 0。
[HttpPost]
[RequiresResource(SecurityConstants.IndividualOverview_Configuration, eActions.AddNew | eActions.Update)]
public ActionResult Save(int documentId, string evaluationVariableName, Question question)
{
// question.TextRows 此处为 0 ...
对发生的事情有任何猜测吗?
我继承了这段代码,但我没有看到任何可以调整的自定义模型绑定器。
更奇怪的是所有其他属性都很好地渗透到控制器中。
【问题讨论】:
-
有什么理由让 ASP.NET MVC 视图模型实现
IXmlSerializable?这在我看来完全是一团糟。您能否展示您的完整模型代码以及请求的完整 Fiddler 捕获? -
@DarinDimitrov:这不是一个好的理由。我想过去 XmlSerialization 需要额外的接口,我担心它会破坏一些不会出现在我的单元测试中的东西。如果我发布这个类的模型,恐怕我会因为泄露我们的内部架构而惹上麻烦(安全原因)。
-
但是,如果您不向您的班级展示,您希望我们如何提供帮助?我的意思是我可以为您编写一个简单的 ASP.NET MVC 应用程序,该应用程序具有一个具有
TextRows整数属性的视图模型和一个包含带有name="Question.TextRows"的输入字段的视图,我完全向您保证它会工作。所以结论是问题出在你没有显示的代码的某些部分。例如,一些自定义模型绑定器或这种糟糕的IXmlSerializable实现不应该在 ASP.NET MVC 视图模型中完成。 -
@DarinDimitrov:是的,我认为这是公平的。我想我可能忽略了一些东西(比如 TextRows 是一个关键词或其他东西)。我会调查可疑的界面。
标签: asp.net-mvc-2 .net-4.0 model-binding