1

セットアップ:ASP.NET MVC3、jQuery、C#

同じアクションメソッドから返されるさまざまな部分ビューを処理するためのクリーンなソリューションを誰かが持っていますか?1つは次のステージ用、もう1つは検証エラーでビューを再度返すためのもの、もう1つは未処理の例外を表示するためのものです。

私は次のようなことをするコントローラーメソッドを持っています:

public ActionResult SomeMethod(MyModel model)
{

    if(_service.Validate(model))
    {

    if(_service.Update(model))
    {
        // return next view once success
                return PartialView("EverythingIsGood"); // This should be pushed into #somediv  
    }else{
        throw new HardException("Tell the client something bad has happened");
    }
    }
    else
    {
    // Return the same view to highlight the validation errors
        HttpContext.Response.StatusCode = 500;
    return PartialView("SomeMethod", model); // This should be pushed into #anotherdiv  
    }

}

クライアントスクリプト

 $.ajax({
        url: baseUrl + "Home/SomeMethod",
        type: "GET",
        success: function (data) {
            $("#somediv").html(data);
        },
        error: function (data) {
            handleError(data);
        }
    });

ソフトエラーのようなものが必要だと思います:

  $.ajax({
        url: baseUrl + "Home/SomeMethod",
        type: "GET",
        success: function (data) {
            $("#somediv").html(data);
        },
        softerror: function (data) {
            $("#anotherdiv").html(data);
        },
        error: function (data) {
            handleError(data);
        }
    });

ソフト検証エラーに対して別のステータスコードを返すことを考えていましたが、これはハッキーな感じがします。

4

2 に答える 2

3

応答でもう1つの変数を渡し、jsを介してクライアント側でその値を確認できます。このようなもの:コントローラー:

if(_service.Update(model))
{
return Json(new {
        IsEverythingGood=true;
                htmlToShow=PartialView("EverythingIsGood"); // This should be pushed into #somediv
    });
}

..。

else
    {
          return return Json(new {
            IsEverythingGood=false;
                    htmlToShow=PartialView("SomeMethod", model); // This should be pushed into #anotherdiv  
    }

そしてあなたのJavaScriptで:

success: function (data) {
    if(data.IsEverythingGood==true){
        $("#somediv").html(data.htmlToShow);
    }
    else if(data.IsEverythingGood==false){
        $("#anotherdiv").html(data.htmlToShow);

    }
于 2012-07-16T08:29:29.570 に答える
1

あなたは以下のようなことをすることができます。

意見

 $.get("Home/Index", { random: '@DateTime.Now.Ticks' }, function (response,textData,jqXHR) {
    // Based on **jqXHR.status** value you can fill value of div
    $("#DivName").html(response);
 });

コントローラ

public ActionResult Index(MyModel model)
{
   if(_service.Validate(model))
    {

    if(_service.Update(model))
    {
        // return next view once success
                return PartialView("EverythingIsGood"); // This should be pushed into #somediv  
    }else{
        throw new HardException("Tell the client something bad has happened");
    }
    }
    else
    {
    // Return the same view to highlight the validation errors
        HttpContext.Response.StatusCode = 500;
    return PartialView("SomeMethod", model); // This should be pushed into #anotherdiv  
    }
}
于 2012-07-03T12:42:09.067 に答える