屏幕上显示删除超链接:
UsersPartial VIEW:
<%: Ajax.ActionLink("Delete", "Delete", new { id = item.UserID }, new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "tabs-users", InsertionMode = InsertionMode.Replace }, htmlAttributes: new { data_target = "#tabs-users" })%>
这会调用我的控制器中的方法
CONTROLLER
[HttpGet]
public PartialViewResult Delete(int id)
{
userManager.DeleteUser(id);
ViewBag.Status = string.Format("User deleted ok, id: {0}", id);
return PartialView("UsersPartial", userManager.GetUsers());
}
在上面的代码中,我返回一个PartialView,这是有效的。我还想在ViewBag.Status上面定义的这个视图的顶部显示一条消息,但是我只希望它在执行此操作后显示此div。
另请注意,我要返回的视图是强类型的:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<LMS.Data.User>>" %>
最后,我要显示的状态消息是我创建的另一个局部视图中的div,因此我可以在整个站点中显示它。
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
<div id="status" class="statusok">
<%: ViewBag.Status %>
</div>
这样做的正确方法是什么?
答案 0 :(得分:3)
ViewBag.Status
将为null,因此您只需在视图中对其进行检查,然后显示它:
@if(ViewBag.Status != null)
{
<div id="status" class="statusok">
@ViewBag.Status
</div>
}
在后续回复相同视图的调用中,只需将ViewBag.Status
设置为null
,如果您不再希望它显示。
答案 1 :(得分:2)
您无法从控制器操作返回2个不同的部分视图。您可能使用的一种方法是render the first partial to a string然后让控制器操作返回一个带有2个属性的JSON结果 - 一个包含HTML部分,另一个包含要显示的消息:
[HttpDelete]
public PartialViewResult Delete(int id)
{
userManager.DeleteUser(id);
return Json(new
{
Partial = RenderPartialViewToString("UsersPartial", userManager.GetUsers()),
StatusMessage = string.Format("User deleted ok, id: {0}", id)
});
}
然后:
<%= Ajax.ActionLink(
"Delete",
"Delete",
new {
id = item.UserID
},
new AjaxOptions {
HttpMethod = "DELETE",
OnSuccess = "onDelete"
},
htmlAttributes: new { data_target = "#tabs-users" }
) %>
然后编写onDelete
回调:
function onDelete(result) {
$('#tabs-users').html(result.Partial);
// TODO: instead of alerting display the message wherever you want
// and using whatever plugin you want to make it look pretty
alert(result.StatusMessage);
}
您还会注意到我已使用正确的HTTP动词执行此任务 - DELETE。切勿使用GET动词来调用正在修改服务器状态的控制器操作(例如删除实体)。