Asp.net mvc 尽管路由到控制器,Url.ActionLink仍会导致404错误

Asp.net mvc 尽管路由到控制器,Url.ActionLink仍会导致404错误,asp.net-mvc,asp.net-mvc-3,jquery,Asp.net Mvc,Asp.net Mvc 3,Jquery,在我的ASP MVC 3页面上,当用户从下拉列表中选择一个没有相应值的项目时,我会动态创建一个字段集,其中包含一个带有onclick()方法的按钮。当用户在输入框中为他们想要创建的字段键入一个值,然后单击按钮时,我正试图使用适当的参数(下拉列表中选择的项目和用户刚刚输入的文本)将它们发送到create控制器操作。然而,每次我点击按钮,我都会收到一个404错误 我在控制器中的Create方法的开始处设置了一个断点,它从未被触发,因此我知道问题不在于渲染了什么并发送回视图,而在于最初试图到达Crea

在我的ASP MVC 3页面上,当用户从下拉列表中选择一个没有相应值的项目时,我会动态创建一个字段集,其中包含一个带有
onclick()
方法的按钮。当用户在输入框中为他们想要创建的字段键入一个值,然后单击按钮时,我正试图使用适当的参数(下拉列表中选择的项目和用户刚刚输入的文本)将它们发送到
create
控制器操作。然而,每次我点击按钮,我都会收到一个404错误

我在控制器中的
Create
方法的开始处设置了一个断点,它从未被触发,因此我知道问题不在于渲染了什么并发送回视图,而在于最初试图到达
Create
控制器(尽管我知道这可能从404错误中很明显:)

我已经检查了URL,它正在正确呈现,所以我不确定我做错了什么。下面是创建字段集的jquery/ajax

<script>
    $(document).ready(function () {
        var globalCreate = '@Url.Action("Create", "DropDownValues")';
        var globalEdit = '@Url.Action("Edit", "DropDownValues")';

        $('#Categories').change(function () {
            var displayPage = $('#Categories option:selected').text();
            $.ajax({
                type: 'GET',
                url: '@Url.Action("getItems","DropDownValues")',
                data: { model: displayPage },
                success: function (data) {
                    if (data == "") {
                        //Clear edits if necessary
                        if ($('#edits').html()) {
                            $('#edits').empty();
                        }

                        $('#edits').append('<fieldset style=width:250px;><legend>No fields yet</legend>' +
                                                '<div class=editor-label>' +
                                                'Enter field name' +
                                                '</div>' + 
                                                '<div class=editor-field>' +
                                                '<input type="text" id="newField" />' +
                                                '</div>' + 
                                                '<button onclick="addItems()">Add Items</button>' +
                                                '</fieldset>');
                    } else {
现在,如果我要选择
Testing display
下拉项,在输入框中键入
asdf
,然后单击按钮,将呈现以下URL

http://localhost:2574/DropDownValues/Create/Testing%20display/asdf
这是来自控制器的方法签名

    public ActionResult Create(string model, string field)
    {

在url中提供参数名称

function addItems()
{
  var newUrl="@Url.Action("Create", "DropDownValues")?model="+
                     $('#Categories option:selected').text() +
                    "&field=" + $('#newField').val();
  window.location.href = newUrl;
}

您还可以考虑对QuiSQL字符串值进行编码。你可以用这个方法


对于创建/更新/删除操作,使用GET请求不是一个好主意。您应该使用POST请求。(机器人/搜索引擎/或愤怒的用户可以删除您的数据/继续向数据库添加垃圾数据)

在url中提供参数名称

function addItems()
{
  var newUrl="@Url.Action("Create", "DropDownValues")?model="+
                     $('#Categories option:selected').text() +
                    "&field=" + $('#newField').val();
  window.location.href = newUrl;
}

您还可以考虑对QuiSQL字符串值进行编码。你可以用这个方法


对于创建/更新/删除操作,使用GET请求不是一个好主意。您应该使用POST请求。(机器人程序/搜索引擎/或愤怒的用户可以删除您的数据/继续向数据库中添加垃圾数据)

您的
创建
操作方法是什么样子的?鉴于您目前所展示的内容,
下拉值
是控制器,
创建
是操作。这是否正确?您的
create
操作方法是什么样子的?鉴于您目前所展示的内容,
DropDownValues
是控制器,
create
是操作。这是正确的吗?