2011-07-02 16 views
2

私はASP.Net MVCプロジェクトのページにこのJavaScriptを持っている:あなたが知っているようにJavascriptとMVC戻り値の型

function showAllianceMembers_onclick() { 
    var strName = $("#allianceNameTextBox").val(); 

    $.ajax(
    { 
     type: "POST", 
     url: "/Alliance/Index", 
     data: "allianceName=" + strName, 
     success: function (result) { 
      if (result.success) { 
       alert("done!"); 
      } 
      else { 
       alert("error!!"); 
      } 
     }, 
     error: function (req, status, error) { 
      alert(error); 
     } 
    }); 
} 

、このスクリプトはMVC Actionを呼んでいます。ここMVC Actionです:

[HttpPost] 
public ActionResult Index(string allianceName) 
{ 
    //Populating an object containing a list (IList) 

    return View(res); 
} 

ここでの問題は、JavaScriptコードは、ちょうど私のコードで何が悪いERRORメッセージ... との警告が表示されていることでしょうか?

答えて

2

コントローラのアクションでは、JSONを送信せず、単純なビューを送信します。そのため、result変数には.successプロパティが定義されていません。その後、

[HttpPost] 
public ActionResult Index(string allianceName) 
{ 
    // populate the result   
    return Json(new { success = true, result = res }); 
} 

と:あなたのコントローラのアクションからJSONを送信する場合や

$.ajax({ 
    type: "POST", 
    url: "/Alliance/Index", 
    data: { allianceName: strName }, 
    success: function (result) { 
     // If you got so far the AJAX request succeeded, the result variable 
     // will contain the final HTML of the rendered view 
     alert("done!"); 
    }, 
    error: function (req, status, error) { 
     alert(error); 
    } 
}); 

$.ajax({ 
    type: "POST", 
    url: "/Alliance/Index", 
    data: { allianceName: strName }, 
    success: function (result) { 
     if (result.success) { 
      // do something with result.res 
      alert("done!"); 
     } 
    }, 
    error: function (req, status, error) { 
     alert(error); 
    } 
}); 
+0

私はJSonResult' 'へ' ActionResult'を変更すべきか? –

+2

@Dr TJ、そうしてはいけません。 JsonメソッドはActionResultから派生したJsonResultを返します。だから、より一般的なあなたのアクションの署名でActionResultを保つためです。 –

1

私はあなたがしようとしていると仮定し、ここであなたのAJAX要求は次のようになり方法ですHTMLマークアップではなく、データを取得します。
はこのお試しください:

$.ajax(
{ 
    type: "POST", 
    url: "/Alliance/Index", 
    data: { 'allianceName' : strName }, 
    dataType: 'json', 
    success: function (result) { 
     if (result.success) { 
      alert("done!"); 
     } 
     else { 
      alert("error!!"); 
     } 
    }, 
    error: function (req, status, error) { 
     alert(error); 
    } 
}); 

をそして、これも更新:

[HttpPost] 
public JsonResult Index(string allianceName) 
{ 
    //Populating an object containing a list (IList) 

    return new JsonResult { Data = res }; 
} 
+0

彼は自分の行動からJSONを返さず、HTMLのビューを返します。 –

+0

ああ、私のコメントを考慮に入れてあなたの答えを更新して、私のdownvoteを削除しました。 –

+1

@ダーリン、あなたは彼が実際に何を返そうとしているのか分からない。実際には問題だと感じています。データを取得しようとしていますが、代わりにビューを返しています。 – Kon