2017-03-13 13 views
1

ボタンで簡単なフォームを持つシンプルなフォームを作成しました。このボタンのjavascriptメソッドを使用してOnclickを実行すると、 '/ Parser/GetParseData'に移動するajaxが起動されます。しかし、私はいつも細かいことなくエラーになっています(常にrequest.failを実行します)。ASP.Net MVC ajaxは常にエラーを返す(ルーティングの問題)

問題は何か分かりません。一般的な私の目標は、フォームからのデータを使ってファイア・アヤックスであり、成功した後(答えを得る)に受け取った文字列を$( '#result')に入れたいと思います。

お手伝いできますか?

[OK]を私のビュー:

@using Project.Domain.Entities 
@model ParserHelper 

@{ 
    ViewBag.Title = "Project"; 
} 
<h2>simple form asp.net mvc 5</h2><br/> 

@using (Html.BeginForm()) 
{ 
<fieldset> 
    <div class="editor-field"> 
     @Html.TextAreaFor(Model => Model.InputData) 
    </div> 
    <div class="radio-field"> 
     @Html.RadioButtonFor(Model => Model.TypeOfResult, "xml") @Html.Label("Xml") <br/> 
     @Html.RadioButtonFor(Model => Model.TypeOfResult, "csv") @Html.Label("Csv") 
    </div> 
    <button onclick="submitTest()">Request!</button> 
</fieldset> 
} 

<div id="result"> 
</div> 

<script src="~/Scripts/jquery-1.10.2.min.js"></script> 
<script> 
     function submitAlert() { 
      alert("testtest"); 
     } 

     function submitTest() { 
      event.preventDefault(); 

      var data = { 
       InputData: $('#InputData').val(), 
       TypeOfResult: $('#TypeOfResult').val() 
      }; 

      request = $.ajax({ 
       url: "/Parser/GetParseData", 
       type: "post", 
       formData: data 
      }); 

      request.done(function (response, textStatus, jqXHR) { 
       alert("Hooray, it worked!"); 
       $('#result').text('Its worked:' + response); 
      }); 

      request.fail(function (jqXHR, textStatus, errorThrown) { 
       alert(
        "The following error occurred: " + 
        textStatus, errorThrown 
       ); 
       $('#result').text('Sorry, error'); 
      }); 
     } 
</script> 

私のモデルは次のとおりです。ParserController::コントローラー:

[HttpPost] 
public string GetParseData(IFormHelper formData) 
{ 
    return "ANSWER!!!"; 
} 

私もこれを追加

public class ParserHelper : IFormHelper 
{ 
    public string ResultAfterParse { get; set; } 

    public string InputData { get; set; } 

    public string TypeOfResult { get; set; } 
} 

最後に、ここでは、中に私のコントローラメトがありますルーティング:

routes.MapRoute(
      name: "PostData", 
      url: "{controller}/{action}", 
      defaults: new { controller = "Parser", action = "GetParseData" 
}); 

これ以上の情報が必要な場合は、私に知らせてください - この投稿を編集します。

解決済み。

答えて

2

あなたのPOSTメソッドのシグネチャは、あなたがパラメータとしてinterfaceを使用することはできません

public string GetParseData(ParserHelper formData) 

する必要があります。 DefaultModelBinderは、Activator.CreateInstance()interfaceを使用してオブジェクトを初期化することはできません。具体的な型のみを初期化します。

+0

しかし、私はIOCコンテナを使用しています - 私はNinjectを意味します。それでも私は強く縛られたvarを入れなければならない? –

+1

did'nt notice that bit、good catch :) –

+1

はい(あなた自身のカスタムModelBinderを作成しない限り) –

1

404が見つからない場合の場合、クライアント側のコードがいくつかのサブファイルにある別のjsファイルに移動された場合にほとんど失敗するURLをハードコードするため、URLが正しくない可能性がありますURLのパスが無効になる場合にはフォルダは、次のような正しいURLを生成するUrl.Action方法を使用する必要があります:

url: '@Url.Action("GetParseData","Parser")' 

はそれが役に立てば幸い!

+0

私はそれを試みましたが、それは助けになりません。私はそれが内部サーバーエラーであることを知っている –

関連する問題