模型对象初始化

本文关键字:初始化 对象 模型 | 更新日期: 2023-09-27 18:16:03

我正在使用代码优先的方法创建我的第一个基于教程的基本ASP MVC应用程序。

我无法理解控制器/视图上下文中的某些内容。

好的,这是我的视图脚本的一部分,它包含一个基本的形式:

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)
    @Html.TextBoxFor(model => model.customerId, new { @Value = ViewBag.customerId })
    @Html.EditorFor(model => model.customerEmailAddress)
    <input type="submit" value="Next" />
}

只是一个简单的表单,有几个字段和一个提交按钮。

这是我的控制器

// GET
public ActionResult Index(int? customerId) // The customerId param is passed from the URL, irrelevant to the question
{
    if(customerId == null)
    {
        customerId = generateCustomerId();
    }
    // At this point, I need to save this customer ID to the
    // one of the Customer objects attributes, however,
    // I cannot access the Customer object here?
    return View();
}
// POST
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Index(Customer Customer)
{
    // This customer parameter represents the object model Customer
    // which I use in my database schema - but where did it come from?
    // How can I access this in my GET index actionresult above?
    // ---
}

代码中的注释解释了我要做的事情- post index方法中的Customer对象参数来自哪里?它是由ASP自动生成和初始化的吗?如何在GET Index方法中访问这个对象?我想我得自己初始化它?

模型对象初始化

用稍微不同的方式来解释…

razor视图中的表单将打包您的模型(包含您输入的更改)并将其POST到第二个操作中——这就是为什么Customer对象是一个参数——它将包含您更新的客户数据。

第一个操作期望您实现一种方法来查找特定的客户(带有id)并创建客户模型,然后将其传递给视图。

Q/post index方法中的Customer对象参数来自哪里?A/它不是通过MVC自动初始化的,它将来自于你在提交它的索引页中的表单,然后它会发送到这个Action方法。

Q/我如何在GET索引方法中访问这个对象?A/你不能所有的索引都有一个CustomerId,所以基于它,你可以查询数据库以获得特定的客户并做任何你想做的事情。