在HttpPost之后显示成功的消息

时间:2018-05-08 09:13:16

标签: asp.net asp.net-mvc

我有一个有注册表格的视图。如果提交了注册表单,我想返回到同一视图并显示一个临时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实现此目的?

1 个答案:

答案 0 :(得分:0)

您尚未说明是否返回相同的视图,但无论您返回的任何视图,都可以打印出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语句中。也许可以考虑创建一个可重复使用的局部视图和一个“消息”对象作为它的模型,它可以传达所有那种东西,而你可以在整个申请过程中使用它。

N.B。如果您要返回相同的视图,您可以始终只使用ViewBag而不是TempData - TempData非常有用,因为它会在请求之间保持不变,例如如果您在当前操作结束时重定向到另一个操作,而不是直接返回视图。