ASP.Net MVC发布后显示特定的HTML

Ste*_*fen 0 asp.net-mvc-3

我仍然是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>
}
Run Code Online (Sandbox Code Playgroud)

该模型:

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; }
}
Run Code Online (Sandbox Code Playgroud)

而我的控制器:

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);
        }
Run Code Online (Sandbox Code Playgroud)

Jon*_*and 7

您无需添加单独的视图.快速解决方案是在动态ViewBag对象上设置属性并检查其在视图中的存在.

在您的控制器中,设置动态ViewBag属性...

ViewBag.Message = "A new password has been sent to your email address.";
Run Code Online (Sandbox Code Playgroud)

在你看来,像......

@if(ViewBag.Message != null) {
    <div class="message">@ViewBag.Message</div>
}
Run Code Online (Sandbox Code Playgroud)

您可以在此处找到更多信息.

如果使用强类型视图,则只需向视图模型对象添加一个属性即可存储消息,并以检查动态ViewBag属性的方式检查它,以确定是否显示消息.