1

在我的 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 {

这是onclick方法

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

现在,如果我要选择Testing display下拉项,asdf在输入框中键入并单击按钮,将呈现以下 URL

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

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

    public ActionResult Create(string model, string field)
    {
4

1 回答 1

1

在 url 中提供参数名称。

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 请求。(机器人/搜索引擎/或愤怒的用户可以删除您的数据/继续向您的数据库添加垃圾数据)

于 2013-06-03T21:06:06.247 回答