【问题标题】:ASP.Net MVC Showing specific html after postASP.Net MVC 在发布后显示特定的 html
【发布时间】:2011-02-26 01:43:38
【问题描述】:

我对 ASP.Net MVC 还是很陌生,所以也许这是一个愚蠢的问题。

我正在使用具有 razor 语法的 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);
        }

【问题讨论】:

    标签: asp.net-mvc-3


    【解决方案1】:

    您不需要添加单独的视图。快速的解决方案是在动态 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 属性相同的方式检查它以确定是否显示消息。

    【讨论】:

    • 真的很抱歉再次打扰您。我尝试了使用强类型模型的方法,但由于某种原因它没有出现。我已经编辑了问题以澄清。
    • 你能把你的视图模型的代码和@model声明贴在你的视图顶部吗?你试过 ViewBag 方法成功了吗?
    • 我刚刚尝试使用 ViewBag - 结果相同 :-( 我在原始帖子中添加了一个完整的代码示例。
    • 好吧,我想通了。在发布帖子后,我没有在 chrome 中获得新的源代码,因此我认为它没有渲染它。然而确实如此,只是该类是显示隐藏的(我没有清理过的旧样式)DOH。所以你的例子工作得很好,这是我的坏事。
    猜你喜欢
    • 2010-12-06
    • 1970-01-01
    • 2020-11-22
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多