2016-09-12 7 views
-1

のasp.net MVCでは動作しません私のjqueryのAJAXは、私がAsp.Net MVCではデータを介してのjQueryのAjaxを送りたい

しかし、機能はここで

私のJavaスクリプトをExcutedエラーセクションと呼ばれていた作成した場合ここで

function create() { 
     $.ajax({ 
      url: "@Url.Action(actionName:"Create",controllerName:"Tag",routeValues:new { Area="Admin"})", 
      contentType: "application/json", 
      type: "POST", 
      dataType: "json", 
      data: $("#myForm").serialize(), 
      success: function (response) { 
       eval(response.Script); 
      }, error: function() { 
       alert("Error"); 
      } 
     }); 

は私のアクションメソッド

[ValidateAntiForgeryToken,HttpPost, AjaxOnly] 
    public ActionResult Create(Tag tag) 
    {    
     JsonData data = new JsonData(); 
     if (ModelState.IsValid) 
     { 
      if (TagOperation.Where(x => x.Text == tag.Text) != null) 
      { 
       try 
       { 
        TagOperation.Add(tag); 
        data.Script = MessageBox.Show("Message", MessageType.Success).Script; 
        return RedirectToAction(actionName: "Index", controllerName: "Tag", routeValues: new { Area = "Admin" }); 
       } 
       catch (Exception ex) 
       { 
        data.Script = MessageBox.Show("Message", MessageType.Error).Script; 
        return Json(data); 
       } 
      } 
     } 
     data.Script = MessageBox.Show(ModelState.GetErrors(), MessageType.Warning).Script; 
     return Json(data); 
    } 

されており、ここで送る私の図であり、データを介してjQueryのAjaxの

@using (Html.BeginForm("Create", "Tag", FormMethod.Post, new { id = "myForm" })){ 
    @Html.AntiForgeryToken() 
<div class="form-horizontal">   
    @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
    <div class="form-group"> 
     @Html.LabelFor(model => model.Text, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.EditorFor(model => model.Text, new { htmlAttributes = new { @class = "form-control" } }) 
      @Html.ValidationMessageFor(model => model.Text, "", new { @class = "text-danger" }) 
     </div> 
    </div> 

    <div class="form-group"> 
     <div class="col-md-offset-2 col-md-10"> 
      <input onclick="create();" type="button" value="Save" class="btn btn-default" /> 
     </div> 
    </div> 
</div> 
} 
+0

「contentType:application/json」を削除して起動します。動作していない場合は、エラーの内容を説明してください。複数のエラーがあります。 Ajax呼び出しはリダイレクトしないので、 'return RedirectToAction()'は無意味です。 'MessageBox.Show()'はMVCではなくWinFormsです –

+0

私はcontentTypeを削除しますが動作しませんし、500ステータスコードとエラータイトルを取得する必要がありますanti-forgeryフォームフィールドです... ValidateAntiForgeryTokenとHtml.AntiForgery My Form.And MessageBoxはJavaScriptを生成するための独自のクラスです – HashemMaya

+0

'500(内部サーバーエラー)'は、コントローラコードがスローして例外を発生していることを意味します。フォームに 'ValidateAntiForgeryToken'を置いたらどういう意味ですか?これはコントローラーメソッドに適用される属性です。 –

答えて

0

あなたの行動の結果メソッドに[HttpPost]属性を追加してみてください(デフォルトのアクションの結果でGETを使用)

[HttpPost] 
public ActionResult Create(Tag tag){..} 
+0

私はこの属性をValidateAntiForgeryTokenとHttpPostに入れても動作しません – HashemMaya

+0

コードが500(内部サーバーエラー)投げ ? – Aldo

+0

はいサーバーから500コードを受け取る – HashemMaya

0

あなたがリクエストヘッダにトークンを追加してみてください。

var token = $('input[name="__RequestVerificationToken"]').val(); 

var headers = {}; 

headers['__RequestVerificationToken'] = token; 

$.ajax({ 
     headers: headers, 
}); 
+0

これは機能しません。例外はスローされた前と同じです – HashemMaya

関連する問題