我不认为有在这里一个解决方案。
反正这是我的解决方案,它使用jQuery的:
1)创建一个MyResultModel类来处理一个消息给用户
public enum MyResultType { Info, Error }
public class MyResultModel
{
public MyResultModel(MyResultType type, string message) {
switch (type) {
case MyResultType.Info: Title = "OK"; break;
case MyResultType.Error: Title = "Error!!!"; break;
}
Message = message;
}
public String Title { get; set; }
public String Message { get; set; }
}
2)创建命名MyResult
的局部视图共享文件夹来处理模型
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyResultModel>" %>
<div id="resultTitle"><%: Model.Title %></div>
<div id="resultMessage"><%: Model.Message %></div>
3)为您的控制器创建并使用BaseController,并向其中添加以下方法。这个方法简单地自定义HTTP标头添加到响应
protected PartialViewResult PartialView(string viewName, object model, string resultHeader) {
Response.AppendHeader("MyHttpCustomHeader", resultHeader);
return base.PartialView(viewName, model);
}
4)在你的行动返回MyResultView当你做了
[HttpPost]
public virtual ActionResult DoSomething() {
try {
//Do Something
return PartialView("MyResult",
new MyResultModel(MyResultType.Info, "Operation Completed"),
"HttpResultInfo");
}
catch (Exception ex) {
return PartialView("MyResult",
new MyResultModel(MyResultType.Error, ex.Message),
"HttpResultError");
}
}
5)最后,使用jQuery提交表单并处理结果。
$.ajax({
type: "post",
dataType: "html",
url: "your/url/here",
data: $("#myform").serialize(),
success: function (response, status, xml) {
var resultType = xml.getResponseHeader("MyHttpCustomHeader");
if (resultType == null) {
//No message do whatever you need
}
else {
//response contain your HTML partial view here. Choose your
//desidered way to display it
}
}
});
对于这样的场景,您不需要在母版页上放置一个控件。您可以:
- 显示视图,因为它来自于行动没有任何修饰
- 使用一些花哨的消息显示技术如StackOverflow上确实有橙色的滑动消息(在这种情况下,简单的提取标题,并从消息返回的HTML)
- 使用一些花哨的jQuery插件为jGrowl显示您的消息
如果你想请检查是否它是一个信息/错误消息只需检查与jQuery自定义标题在else
分支
var title = $(response).filter("#resultTitle").text();
var message = $(response).filter("#resultMessage").text();
if (resultType == "HttpResultInfo") {
showInfoMessage(title, message);
}
else if (resultType == "HttpResultError") {
showErrorMessage(title, message);
}
希望它有帮助!
这就是伟大的东西洛伦佐!你的帖子给了我一些我以前没有想过的想法。 – Todd 2010-11-25 03:57:27