【问题标题】:ASP.NET MVC Binding to View Model as well as routed valuesASP.NET MVC 绑定到视图模型以及路由值
【发布时间】:2013-01-11 02:08:01
【问题描述】:

我知道有人问过关于 ASP.NET MVC 中复杂模型绑定的类似问题,但我遇到了绑定问题,因为在 POST 上返回的前缀不足,我想知道是否有简单的解决方案。

我有一个看起来像这样的视图模型:

public class ViewModel<Survey, Contact>
{
    public Survey Model { get; set; }
    public Contact Model2 { get; set; }
}

然后我有一个像这样接受 POST 的操作方法

public ActionResult Survey(
    string id, string id2, SurveyViewModel<Survey, Contact> model)
{
    // code goes here...
}

在我的表单中,前两个 id 来自 URL 路由,然后我有表单代码(使用 @Html.EditorFor(x =&gt; x.Model.SurveyName) 或类似名称),生成的名称如下:

<input class="text-box single-line" id="Model_Email"
       name="Model.Email" type="text" value="" />

如果我将名称从 Model.Email 更改为 model.Model.Email,则帖子有效,但我试图避免创建自定义模型绑定器。

有吗

  1. 我可以在视图中进行设置以更改使用 @Html.EditorFor 类型化视图帮助器在视图中呈现的所有字段的名称?
  2. 我可以使用操作上的 Bind 属性进行更改,以使其默认绑定到该对象?

答案可能是“构建一个自定义活页夹”,但我只是想在咬掉它之前提出这个问题。

感谢您的帮助。最好的问候,

哈尔

【问题讨论】:

  • 您是否尝试过更改您的Model 属性的名称?当模型具有名为 Model 的属性时,模型绑定器会感到困惑。
  • 同样,您是否尝试过在您的操作中重命名模型参数?

标签: asp.net-mvc asp.net-mvc-3 razor


【解决方案1】:

您可以使用自定义 HtmlFieldPrefix 传递自定义 viewdata 来查看。使用 helper 呈现的每个控件都将具有该前缀。

ViewData.TemplateInfo.HtmlFieldPrefix = "prefix here";

看看这个:Forcing EditorFor to prefix input items on view with Class Name?

【讨论】:

  • 我最终覆盖了 OnActionExecuting 并在那里设置 HtmlFieldPrefix。只要我将发布的视图模型命名为与前缀相同的东西以及任何接受它的操作,一切似乎都很好。
  • 我的意思是 OnActionExecuted(执行后,而不是执行前)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-11
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 2014-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多