首页 > 解决方案 > HttpPost 后显示成功消息

问题描述

我有一个包含注册表单的视图。如果提交了注册表,我想返回到同一个视图并显示一个临时的Bootstrap Well然后淡出。在我的控制器中检查我的想法

控制器

// Insert User
[HttpPost]
public void AddUser(ResourceViewModel resourceInfo)
{
    // Fetch data from ViewModel as parameters Execute Stored Procedure

    db_RIRO.sp_InsertNewUser(resourceInfo.Username, resourceInfo.Password);
    db_RIRO.SaveChanges()

    // My Idea
    if (storedProcedure succesful)
    { // display success ViewBag in view }
    else 
    {
      // display failed ViewBag in view
    }

}

看法

<div class="form-group">
    <label class="col-sm-3 control-label lb-sm" for="textinput">Password</label>
    <div class="col-sm-5">
        @Html.TextBoxFor(a => a.Password, new { @class = "form-control input-sm" })
    </div>
</div>

<div class="form-group">
    <label class="col-sm-3 control-label lb-sm" for="textinput">Username</label>
    <div class="col-sm-5">
        @Html.TextBoxFor(a => a.Username, new { @class = "form-control input-sm" })

    </div>
</div>

我将如何使用ViewBag

标签: asp.netasp.net-mvc

解决方案


您还没有说是否返回到相同的视图,但是在您返回的任何视图,您都可以将 TempData 打印出来。

这是一个基本示例:

控制器:

[HttpPost]
public void AddUser(ResourceViewModel resourceInfo)
{
    // Fetch data from ViewModel as parameters Execute Stored Procedure

    db_RIRO.sp_InsertNewUser(resourceInfo.Username, resourceInfo.Password);
    db_RIRO.SaveChanges()

    // My Idea
    if (storedProcedure succesful)
    { 
      // display success tempdata in view 
      TempData["Message"] = "Data saved successfully";
    }
    else 
    {
      // display failed tempdata in view
      TempData["Message"] = "Sorry, an error has occurred";
    }
  //...etc
}

查看(将其放置在视图中您喜欢的任何位置):

@if (TempData["Message"] != null)
{
    @Html.Raw(TempData["Message"].ToString())
}

这个例子只使用了一个简单的字符串,但如果需要,您可以使用更复杂的数据结构(例如,我想您可能想要为成功/失败设置颜色方案/CSS 类,或者添加 Javascript 来获得诸如淡入淡出效果之类的东西- 你可以把这个脚本放在你的if语句中。也许考虑创建一个可重用的局部视图和一个“消息”对象作为它的模型,它可以传达所有这些东西,你可以在整个应用程序中使用它。

注意如果您要返回到同一个视图,您始终可以只使用 ViewBag 而不是 TempData - TempData 可能很有用,因为它将在请求之间持续存在,例如,如果您在当前操作结束时重定向到另一个操作,而不是直接返回一个视图。


推荐阅读