我已采用“标准”方式:
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自动收集FORM值,在POST操作中,在视图中我有这些属性的所有属性:
@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就能完成所有的验证工作。那么,如何收集价值并将其重新投入会话?
谢谢。
答案 0 :(得分:2)
如果我理解你的问题,最好的做法是放弃,你可以将会话对象作为模型传递。
2警告:
传递会话对象时应该转换
返回视图((RespondentObject)会话["响应者"])
在视图中,请记住绑定到对象类型
@model perseus.Models.RespondentObject
我建议您在控制器中读取和写入会话。
您指出您将使用多个部分来创建表单。你有两个选择:
你问为什么使用对象是不好的形式:
也就是说,您最了解您的应用和架构。你必须做出决定并支持他们。尽管我是纯粹主义者,但我认为最佳实践不是宗教,而是宗教。情况各不相同。