0

我已经做到了“标准”的方式:

    public ActionResult Respondent()
    {
        return View(Session["Respondent"]); //passing the model
    }

    [HttpPost]
    public ActionResult Respondent(Respondent resp)
    {
        repository.UpdateRespondent(Respondent resp);
        Session["Respondent"] = respondent; //put back into session
        return View(respondent); //redraw view, passing in respondent
    }

它有效。我只为 MVC 传递响应模型以在 POST 操作中自动收集 FORM 值,在视图内部我为所有属性提供了这些:

@using (Html.BeginForm())
{
    @Html.LabelFor(model => model.FirstName)
    @Html.EditorFor(model => model.FirstName)
    @Html.ValidationMessageFor(model => model.FirstName)

    // and so on...
}

我的问题是 - 如果我已经在使用 Session 对象(位于 Session 中),有什么方法可以将 Session 对象用作视图内的模型,以便 HttpPost 工作,包括所有验证。那么,这些值将如何被收集并放回会话中呢?

谢谢你。

4

1 回答 1

2

如果我理解您的问题,除了最佳实践之外,您可以将会话对象作为模型传递。

2 警告:

  1. 传递时应强制转换会话对象

    返回视图((RespondentObject)Session["Respondent"])

  2. 在视图上,记得绑定到对象类型

    @model perseus.Models.RespondentObject

我建议您在控制器中读取和写入 Session。

您指出您将使用多个部分来创建表单。你有2个选择:

  • 创建一个由 Action 接收的模型,其中包括所有对象。
  • 将每个参数单独传递给您的操作。

你问为什么使用对象是不好的形式:

  • 因为它们是非类型的
  • 因为 Sessions 不稳定(不可靠)

也就是说,您最了解您的应用程序和架构。你必须做出决定并支持他们。尽管我是一个纯粹主义者,但我相信最佳实践是一种指南,而不是一种宗教。情况不同。

于 2013-01-30T19:27:38.567 回答