我正在使用ASP.NET MVC 3来构建Web应用程序.
我想要做的是在两个控制器之间传递值,虽然有很多方法可以做到这一点我特别感兴趣的是使用TempData它.
public ActionResult Action1()
{
string someMessage;
Test obj = SomeOperation();
if(obj.Valid)
{
someMessage = obj.UserName;
}
else
{
someMessage = obj.ModeratorName;
}
TempData["message"] = someMessage;
return RedirectToAction("Index");
}
public ActionResult Index()
{
ViewBag.Message = TempData["message"]
return View();
}
Run Code Online (Sandbox Code Playgroud)
那么TempData这里的使用是否正确?我的意思是在最好的编程实践中使用这种正确的方法TempData吗?
在什么时候应该TempData使用案例?
注意:我已经通过以下链接
谢谢
我遇到的一个常见情况是在用户执行操作以通知他们成功后向用户提供通知/确认.
例如,假设用户提供反馈表单的反馈,然后单击" 提交反馈".您可能希望在执行某些验证后显示"感谢您的反馈"消息,例如他们在数据库中有有效的电子邮件.一些伪代码:
public ActionResult SubmitFeedback(string Feedback, int UserID)
{
MyDataContext db = new DataContext()
if(db.usp_HasValidEmail(UserID)) //Check user has provided a valid email
return View("Index"); //Return view and display confirmation
else
ModelState.AddModelError("InvalidEmail", "We do not hold an email record for you. Please add one below");
return View("Index);
}
Run Code Online (Sandbox Code Playgroud)
我理解如何通过使用Html.ValidationMessage等来验证条目.这很好,我通常检查无效条目,无论是在客户端使用jQuery还是在我的Action早期(即在我开始访问数据库之前)并在有无效条目时退出我的操作.
但是,所有条目都有效且您想要显示确认消息的情况如何?
选项1:拥有完全独立的视图
这似乎违反了DRY原则,通过使用全新的View(和ViewModel)来显示几乎相同的信息,期望用户通知.
选项2:视图中的条件逻辑
在这种情况下,我可以在View中有一个条件语句,用于检查SubmitFeedbackAction中传递的某些TempData是否存在.再次,伪代码:
<% if(TempData["UserNotification"] != null {%>
<div class="notification">Thanks for your Feedback!</div>
<% } %> …Run Code Online (Sandbox Code Playgroud)