将模型值传递给视图 MVC 5
Passing model values to views MVC 5
我需要正确的方法来做到这一点。
- 我无法使用表单身份验证
- 用户将"login"或根据值
确认身份
我需要像这样引导用户浏览一系列页面
- Contact/MailAddress
- Contact/Phone
- Contact/Email
- Contact/Summary
- Questionaire/Question1
- Questionaire/Question2
- Questionaire/Question3
- Questionaire/Summary
- Final/Certify
- Final/Review
我计划使用 Session 来保存数据,但我无法弄清楚如何将值传递给其他视图以及如何重定向到其他页面。
任何帮助都可以...
我建议不要通过使用会话登录来做你想做的事情,但你正在寻找的是:
TempData.yourModel = new SomeModel { Data = "yourData" };
//next page
var model = (SomeModel)TempData.yourModel;
和
RedirectToAction("yourController", "yourAction");
假设您有一些这样的模型
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 post 返回服务器。你不需要在第一页上这样做,因为无论如何它都是空白的,但我这样做是为了节省时间。
查看联系人地址
@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 操作正在设置一个变量 currentModel
等于 TempData["currentModel"] 中的内容在 ContactAddress
视图中设置。在您重定向到下一个操作之前 ContactPhone
将 TempData["currentModel"]
设置回您正在构建的模型并在下一个操作中使用它。
您确实可以选择将模型作为参数添加到每个操作并传递 currentModel
对象,例如
public ActionResult ContactPhone(ContactQuestionaireModel model)
return RedirectToAction("ContactPhone", currentModel);
这真的取决于你。这不是万无一失的方法。页面刷新和后退和前进按钮可以清除输入的所有内容。将信息存储在 Session
中或将数据实际保存在数据库中可能更为理想。
我需要正确的方法来做到这一点。
- 我无法使用表单身份验证
- 用户将"login"或根据值 确认身份
我需要像这样引导用户浏览一系列页面
- Contact/MailAddress
- Contact/Phone
- Contact/Email
- Contact/Summary
- Questionaire/Question1
- Questionaire/Question2
- Questionaire/Question3
- Questionaire/Summary
- Final/Certify
- Final/Review
我计划使用 Session 来保存数据,但我无法弄清楚如何将值传递给其他视图以及如何重定向到其他页面。
任何帮助都可以...
我建议不要通过使用会话登录来做你想做的事情,但你正在寻找的是:
TempData.yourModel = new SomeModel { Data = "yourData" };
//next page
var model = (SomeModel)TempData.yourModel;
和
RedirectToAction("yourController", "yourAction");
假设您有一些这样的模型
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 post 返回服务器。你不需要在第一页上这样做,因为无论如何它都是空白的,但我这样做是为了节省时间。
查看联系人地址
@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 操作正在设置一个变量 currentModel
等于 TempData["currentModel"] 中的内容在 ContactAddress
视图中设置。在您重定向到下一个操作之前 ContactPhone
将 TempData["currentModel"]
设置回您正在构建的模型并在下一个操作中使用它。
您确实可以选择将模型作为参数添加到每个操作并传递 currentModel
对象,例如
public ActionResult ContactPhone(ContactQuestionaireModel model)
return RedirectToAction("ContactPhone", currentModel);
这真的取决于你。这不是万无一失的方法。页面刷新和后退和前进按钮可以清除输入的所有内容。将信息存储在 Session
中或将数据实际保存在数据库中可能更为理想。