我有一个包含CSS的用户控件,它将呈现一条消息。此控件位于MasterPage中,并从ASPX页面调用,如下所示:
伪代码:
try{
Msg.MessageMode = WebPageMessageMode.OK;
Msg.ShowOK("Report deleted.");
}
catch
{
Msg.MessageMode = WebPageMessageMode.ErrorMessage;
Msg.ShowError("There was a problem deleting the report.");
}
Masterpage.aspx
<cc1:WebPageMessage runat="server" ID="msg" />
我目前在MasterPage中拥有控件,现在对于从这里进行操作感到有些困惑。
我应该将伪代码上面的'Msg'对象放到MasterPage中的View吗?
做某事的正确方法是什么?
答案 0 :(得分:3)
我不认为这里有一个解决方案适合所有人。
无论如何,这是我使用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
}
}
});
使用这样的场景,您不需要在母版页上放置控件。你可以:
如果你想查看它是一个信息/错误消息,只需在else
分支中使用jQuery检查自定义标题
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);
}
希望它有所帮助!
答案 1 :(得分:0)
在控制器中,作为操作的一部分,您可以设置如下消息:
public ActionResult MyAction()
{
// Do some stuff
TempData["message"] = "This is a message.";
return View("MyView");
}
在您的母版页或视图中:
<%
string text = TempData["Message"] as string;
Response.Write(text);
%>
答案 2 :(得分:0)
阅读this blog post,了解如何在rails风格的asp.net mvc中添加消息: