我仍然是ASP.Net MVC的新手,所以这可能是一个愚蠢的问题。
我正在使用带有剃刀语法的MVC 3。
我的问题是,如何在成功发布后显示一些HTML?
我有一个密码恢复页面,在发布正确的信息后,我希望它再次显示该视图,但添加一个“新密码已发送到您的电子邮件地址”。
在WebForms中,我只有一个不可见的面板并显示它,或文字并在回发时填充一些文本。我在MVC做什么?
我想我可以为它添加一个不同的视图,但这看起来有点像矫枉过正 - 或者我是否误解了MVC范式?
编辑:
我尝试使用强类型模型,但它不起作用: - (
我的观点(简化了一下):
@model BudgetPal.Model.MVC.Account.EditModel
@if (Model.ShowConfirmation)
{
<div class="confirmation">Your profile has been saved.</div>
}
模特:
public class RecoverPasswordModel
{
[Required]
[Display(Name = "E-mail")]
[StringLength(250)]
[RegularExpression(@"([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})", ErrorMessage = "Not a valid e-mail address")]
public string Email { get; set; }
public bool ShowConfirmation { get; set; }
}
我的控制员:
public ActionResult Edit()
{
EditModel model = new EditModel(UserSession.User);
return View(model);
}
[HttpPost]
public ActionResult Edit(EditModel model)
{
if (!ModelState.IsValid)
return View(model);
// Save changes here
model.ShowConfirmation = true;
return View(model);
}
答案 0 :(得分:7)
您无需添加单独的视图。快速解决方案是在动态ViewBag对象上设置属性,并检查它在视图中是否存在。
在控制器中,设置动态ViewBag属性...
ViewBag.Message = "A new password has been sent to your email address.";
在您看来,有点像......
@if(ViewBag.Message != null) {
<div class="message">@ViewBag.Message</div>
}
您可以找到更多信息here。
如果您使用的是强类型视图,则只需向视图模型对象添加一个属性即可存储该消息,并以检查动态ViewBag属性的方式检查它,以确定是否显示消息。