2017-03-13 45 views
1

我寫了簡單的形式,它具有按鈕的簡單形式。在這個按鈕上用javascript方法onclick應該觸發一個應該去'/ Parser/GetParseData'的ajax。但是我總是得到錯誤而沒有任何細節(總是運行request.fail)。ASP.Net MVC AJAX總是返回錯誤(與路由問題)

我不知道什麼是問題。一般我的目標是從表格和成功後(並獲得答案)數據的火ajax我想把收到的字符串放在$('#result')。

你能幫我嗎?

好我的觀點:

@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> 

我的模式是:

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

    public string InputData { get; set; } 

    public string TypeOfResult { get; set; } 
} 

最後這裏是我的控制器實現方法具:ParserController:控制器:

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

我還添加了本作路線:

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

如果您需要更多信息,請告訴我 - 我將編輯此帖子。

已解決。

回答

2

你的POST方法的簽名必須是

public string GetParseData(ParserHelper formData) 

您不能使用interface作爲參數。 DefaultModelBinder初始化對象使用Activator.CreateInstance()interface不能被初始化,只有它的具體類型。

+0

但我使用IOC容器 - 我的意思是Ninject。即使如此,我必須把強大的典型var? –

+1

did'nt注意到這一點,很好趕:) :) –

+1

是的(除非你是要創建自己的定製ModelBinder) –

1

如果錯誤是找不到404,那麼問題可能的URL是因爲不正確的硬編碼,其失敗主要是,如果客戶端代碼移動到駐留在一些子一個單獨的js文件的URL在這種情況下,URL的路徑變得無效的文件夾,你應該使用Url.Action方法來生成正確的URL,如:

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

希望它能幫助!

+0

我試過了 - 但沒有幫助。我只知道它是內部服務器錯誤 –