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

时间:2011-02-24 18:35:52

标签: 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>
}

模特:

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);
        }

1 个答案:

答案 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属性的方式检查它,以确定是否显示消息。