假设你有一些这样的模型
public class ContactModel
{
public string MailAddress { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
}
public class QuestionaireModel
{
public string Question1Answer { get; set; }
public string Question2Answer { get; set; }
public string Question3Answer { get; set; }
}
public class ContactQuestionaireModel
{
public ContactModel Contact { get; set; }
public QuestionaireModel Question { get; set; }
}
并且您希望从视图到视图以及从操作到操作保持此模型。在您的控制器中,您可以创建 2 个动作。一个用于您的第一个视图,一个用于您的第二个视图
控制器
public ActionResult ContactAddress()
{
var model = new ContactQuestionaireModel();
return View(model);
}
[HttpPost]
public ActionResult ContactAddress(ContactQuestionaireModel model)
{
var currentModel = TempData["currentModel"] as ContactQuestionaireModel;
currentModel.Contact.MailAddress = model.Contact.MailAddress;
TempData["currentModel"] = currentModel;
return RedirectToAction("ContactPhone");
}
public ActionResult ContactPhone()
{
var model = TempData["currentModel"] as ContactQuestionaireModel;
return View(model);
}
[HttpPost]
public ActionResult ContactPhone(ContactQuestionaireModel model)
{
var currentModel = TempData["currentModel"] as ContactQuestionaireModel;
currentModel.Contact.Phone = model.Contact.Phone;
TempData["currentModel"] = currentModel;
return RedirectToAction("ContactEmail");
}
在第一个操作ContactAddress 中,您创建一个新的空白模型并将其传递给您的视图ContactAddress。在该视图中,您可以将 TempData["currentModel"] 设置为等于您传入的模型。这将在 TempData 中保留 1 次发回服务器。你不需要在第一页上这样做,因为它无论如何都是空白的,但我这样做是为了节省时间。
查看联系人地址
@model WebApplication3.Models.ContactQuestionaireModel
@{
ViewBag.Title = "Contact Address";
TempData["currentModel"] = Model; //this will be available to me in the HttpPost action
}
@using (Html.BeginForm())
{
<div class="form-group">
@Html.LabelFor(m => m.Contact.MailAddress, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.TextBoxFor(m => m.Contact.MailAddress, new { @class = "form-control" })
</div>
</div>
<button type="submit">Submit</button>
}
您会在控制器代码中注意到 ContactAddress 的 Post Action 设置的 var currentModel 等于在 ContactAddress 视图中设置的 TempData["currentModel"] 中的值。在您重定向到下一个操作之前,ContactPhone 将 TempData["currentModel"] 设置回您正在构建的模型并在下一个操作中使用它。
您确实可以选择将模型作为参数添加到每个操作并传递 currentModel 对象,如
public ActionResult ContactPhone(ContactQuestionaireModel model)
return RedirectToAction("ContactPhone", currentModel);
这真的取决于你。这不是万无一失的方法。页面刷新和后退和前进按钮可以清除输入的所有内容。将信息存储在Session 中或将数据实际保存在数据库中可能更理想。