我有一个有注册表格的视图。如果提交了注册表单,我想返回到同一视图并显示一个临时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
实现此目的?
答案 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非常有用,因为它会在请求之间保持不变,例如如果您在当前操作结束时重定向到另一个操作,而不是直接返回视图。