【问题标题】:How to display a submit success message after posting a form提交表单后如何显示提交成功消息
【发布时间】:2018-04-02 02:57:12
【问题描述】:

当用户在Register 页面上成功提交时,我想在Index 页面上显示成功提交消息。

我的Register 操作包括:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SaveRegister(AirlineWebApplication.Models.User User, HttpPostedFileBase file)
{
    db.Users.Add(User);
    db.SaveChanges();
    return RedirectToAction("Index");
}

我的Register视图如下。

<section class="registersection">
  <div class="container-fluid">
    <div class="row">
      <div class="signupForm">
        <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
          @using (Html.BeginForm("SaveRegister", "Users", FormMethod.Post)) {
          @Html.ValidationSummary(true)
          @Html.AntiForgeryToken()
          <div class="editor-field">
            <label>Name
                   @Html.EditorFor(model => model.user_name)
            </label>
            @Html.ValidationMessageFor(model => model.user_name)
          </div>
          <div class="editor-field">
            <label>Password
                   @Html.EditorFor(model => model.password)
            </label>
            @Html.ValidationMessageFor(model => model.password)
          </div>
          <p>
            <input type="submit" value="Register" />
          </p>
          }
        </div>
      </div>
    </div>
  </div>
</section>

当我按下Register按钮时,如何在Index页面上显示成功消息“您已注册成功”?

【问题讨论】:

  • 这个问题太笼统了,请说明您到底想要实现什么,什么不起作用。顺便说一句,你在第 42 行有一个无与伦比的&lt;/label&gt;/
  • 您想显示为弹出消息?还是只是在它自己的索引页面上显示消息?
  • 我想要一条弹出消息。
  • 你有 Bootstrap 吗?
  • 是的,我有引导程序。

标签: c# asp.net asp.net-mvc


【解决方案1】:

有很多方法可以做到这一点。例如,在您的控制器中使用 TempData 来了解您来自哪里:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SaveRegister(AirlineWebApplication.Models.User User,
    HttpPostedFileBase file)
{

    db.Users.Add(User);
    db.SaveChanges();
    TempData["Referrer"] = "SaveRegister";
    return RedirectToAction("Index");
}

在您的索引视图中:

@if((string)TempData["Referrer"] == "SaveRegister")
{
    <div class="alert alert-success">
      <strong>You have registered successfully</strong>
    </div>
}

与 ViewBag 不同,TempData 会持续到下一个请求,因此它适合重定向到不同的页面并从那里检索值。

【讨论】:

    【解决方案2】:

    在 Visual Studio 中创建新项目时,您可以查看如何显示确认消息的示例。

    您可以创建一个新视图,例如 RegisterConfirmation,然后在您的控制器中,将最后一行更改为:

    return RedirectToAction("Index");
    

    到:

    return View("RegisterConfirmation");
    

    EDIT 不建议在Index 主页面上显示消息。如果你想这样做,你需要将消息传递到Index页面:

    string message = "You have registered successfully";
    return RedirectToAction("Index", "Home", new { m = message });
    

    然后在index页面的控制器中,需要从查询字符串中抓取消息并添加到模型或者ViewBag中:

    public ActionResult Index(string m) {
        ViewBag.Message = m;
    }
    

    最后,在您的index 视图中,您可以在页面上的任何位置显示div 中的消息:

    <div>@ViewBag.Message</div>
    

    或者,您可以将div 设为弹出窗口。这对于 CSS 来说非常简单。

    如果您不想使用查询字符串(这可能更好),您可以改用TempData

    TempData["Message"] = "You have registered successfully";
    return RedirectToAction("Index", "Home");
    

    Index 视图中:

    <div>@TempData["Message"]</div>
    

    【讨论】:

    • 但我想在“索引”主页面上显示消息。
    • 您需要在问题中清楚地提及这一点。我会更新我的答案。