通过View传递Initialized模型

时间:2014-03-13 04:39:54

标签: c# asp.net-mvc

简单的问题,但我无法在任何地方找到解决方案。 我有1个ActionResult,1个PostResult和1个View。 在Get方法中,我从模型中初始化了一些部分。 之后在视图中我初始化另一部分。 当模型进入Post方法时,它没有很好地初始化。 如何通过View和Methods传递数据? 我不想使用临时对象。

示例:

[HttpGet]
    public ActionResult Register(Guid product_id)
    {

        RegistrationModel model = new RegistrationModel();

        model.Product = **someProduct**;

        return View(model);
    }

    [HttpPost]
    public string Register(RegistrationModel model, Product Product)
    {
                 Here the objects comes initialized only with the parts from the view...
    }

1 个答案:

答案 0 :(得分:3)

您需要了解MVC的工作原理。 有一个名为模型绑定的概念,它负责使用 合适的 HTML映射Model

当我说 合适 时,我的意思是它需要根据特定规则进行格式化。 为了简化这些事情,MVC内置了HtmlHelpers来处理Model属性到HTML元素之间的转换。

您可以从[HttpGet]方法返回:

1)无模型视图return View();

2)具有空白模型return View(new Product());

的视图

3)包含一些数据的模型的视图return View(product);

在视图中,您应该决定:

1)如果您只想显示模型,可以使用(可能不会包含在form中)

  • HtmlHelpers,例如@Html.DisplayFor(x => x.Name)

  • 简单模型调用,如<h1>@Model.Name</h1>

2)如果您希望某些数据回发到您的[HttpPost],您应该

注意将模型的属性“映射”到HTML元素,特别是(所有内容都包含在form内)

  • 通过HtmlHelpers之类@Html.TextBoxFor(x => x.Price)生成“合适的”HTML输出:<input id="Price" name="Price" value="">52.00</input>(推荐)

  • 通过格式良好的HTML( 合适的 ^ _ ^):


   <select id="SelectedLanguageId" name="SelectedLanguageId">
       <option value="1">English</option>
       <option value="2">Russian</option>
    </select>

总结:

1)如果您希望收到返回[HttpPost]方法的内容,则应在其中包含suitable HTML元素。

2)如果您只想显示某些数据,您只需调用模型的属性

3)使用HTML帮助程序而不是原始HTML代码。

注意!

复杂Model的模型绑定是通过 EditorTemplates 循环中的隐藏输入不同类型的序列化等来实现的。