Контроль сообщений на главной странице с ASP.NET MVC - PullRequest
2 голосов
/ 25 ноября 2010

Привет всем.Получил обычай о том, как сделать это, так как я новичок в MVC и пытаюсь реализовать несколько небольших вещей.Именно так я и сделал в WebForms, но хочу перевести его на MVC.

У меня есть пользовательский элемент управления, содержащий 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?

Как правильно сделать что-то подобное?

Ответы [ 3 ]

3 голосов
/ 25 ноября 2010

Я не думаю, что здесь есть универсальное решение.

В любом случае, это мое решение, использующее 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);
}

Надеюсь, это поможет!

0 голосов
/ 01 октября 2011

Читать это сообщение в блоге о том, как добавить сообщение в asp.net mvc в стиле rails:

0 голосов
/ 25 ноября 2010

В контроллере, как часть действия, вы можете установить следующее сообщение:

public ActionResult MyAction()
{
    // Do some stuff

    TempData["message"] = "This is a message.";
    return View("MyView");
}

На главной странице или в вашем представлении:

<%
     string text = TempData["Message"] as string;    
     Response.Write(text);
%>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...