繁体   English   中英

ASP.Net MVC ajax总是返回错误(路由问题)

[英]ASP.Net MVC ajax always return error (issues with routing)

我写了一个简单的表单,它有简单的表单和按钮。 使用此按钮上的javascript方法onclick应该触发ajax,它应该转到'/ Parser / GetParseData'。 但是我总是在没有任何细节的情况下得到错误(总是运行request.fail)。

我不知道是什么问题。 一般我的目标是使用来自表单的数据和成功之后获取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:Controller:

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

我还将其添加为路由:

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

如果您需要更多信息,请告诉我 - 我将编辑此帖子。

解决了。

您的POST方法签名需要

public string GetParseData(ParserHelper formData)

您不能将interface用作参数。 DefaultModelBinder使用Activator.CreateInstance()初始化对象,并且无法初始化interface ,只能初始化其具体类型。

如果错误是404未找到 ,则问题可能是URL不正确,因为URL的硬编码主要是因为客户端代码被移动到单独的js文件,该文件驻留在某些子文件夹中,在这种情况下路径URL变为无效,您应该使用Url.Action方法生成正确的URL,如:

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

希望能帮助到你!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM