尽管路由到控制器,但Url.ActionLink导致404错误

时间:2013-06-03 20:59:43

标签: asp.net-mvc asp.net-mvc-3 jquery

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

我在控制器中的Create方法的开头设置了一个断点,它永远不会跳闸,所以我知道问题不在于渲染的内容并被发送回视图,它是最初尝试到达Create控制器(虽然我明白这可能是因为404错误:)

我已经检查了网址,它正在正确呈现,所以我不确定我做错了什么。这是创建fieldset的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 {

这是onclick方法

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

现在,如果我要选择Testing display下拉项,请在输入框中输入asdf,然后点击按钮,将显示以下网址

http://localhost:2574/DropDownValues/Create/Testing%20display/asdf

这是来自控制器的方法签名

    public ActionResult Create(string model, string field)
    {

1 个答案:

答案 0 :(得分:1)

在网址中提供参数名称。

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

您也可以考虑对查询字符串值进行编码。您可以使用encodeURIComponent方法。

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