ASP.NET MVC绑定到视图模型以及路由值

时间:2013-01-10 17:41:44

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

我知道有关ASP.NET MVC中复杂模型绑定的类似问题,但我遇到了一个问题,因为POST上缺少足够的前缀,并想知道是否有一个简单的解决方案。 / p>

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

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

然后我有一个这样的动作方法接受POSTed

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

在我的表单中,前两个id来自URL路由,然后我有表单代码(使用@Html.EditorFor(x => 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属性更改某些内容,以允许它默认绑定到该对象吗?
  3. 答案可能是“建立一个自定义活页夹”,但我只想在咬掉之前提出问题。

    感谢您的帮助。最诚挚的问候,

    哈尔

1 个答案:

答案 0 :(得分:2)

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

ViewData.TemplateInfo.HtmlFieldPrefix = "prefix here";

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