Html.BeginForm не передает параметр - PullRequest
1 голос
/ 30 ноября 2011

У меня есть следующий код, который заполняет выпадающий список и автоматически отправляет форму, но он не передает идентификатор обратно в контроллер.

<script type="text/javascript">
    $(function () {
        $("#ArticleID").change(function () {
            $('#TheForm').submit();
        });
    });
</script>

@using (Html.BeginForm("Details", "Article", FormMethod.Post, new { id = "TheForm" })){
    @Html.DropDownList("ArticleID", (SelectList)ViewBag.ArticleId, "Select Article") 
}

Я получаю:

/Article/Details

Но нужно:

/Article/Details/1

Я слежу за учебником, который останавливается на этом этапе. Я не совсем уверен, что здесь происходит с TheForm, я пытался поставить ArticleID, но это не сработало. Как мне это сделать?


Я тоже пробовал без jQuery, как это,

@using (Html.BeginForm("Details", "Article", FormMethod.Post, new { id = "TheForm" })){

@Html.DropDownList(
"ArticleID",
(SelectList)ViewData["Articles"],
"Please Select an Article",
     new
     {
         onchange = "document.getElementById('TheForm').submit();"
     })
 }

Но параметр также не отправляется через него.

Ответы [ 2 ]

1 голос
/ 18 декабря 2011

Существует встроенный способ визуализации без выбора действия:

var actionUrl = '@Url.Action("Details", "Article")/' + $('#ArticleID').val();
0 голосов
/ 30 ноября 2011

URL определяется до отображения страницы в следующей строке:

@using (Html.BeginForm("Details", "Article", FormMethod.Post, new { id = "TheForm" }))

, что делает:

<form action="/Article/Details" id="TheForm" method="post">

Поскольку значение, которое вы хотите добавить в URL-адрес, ArticleID, определяется выпадающим списком, вам необходимо манипулировать атрибутом action формы с помощью JavaScript.

Что-то вроде этого, вероятно, будет работать:

<script type="text/javascript">
    $(function () {
        $("#ArticleID").change(function () {
            // The following line was changed to use @naspinski's suggestion
            var actionUrl = '@Url.Action("Details", "Article")/' + $('#ArticleID').val();
            $('#TheForm').attr('action', actionUrl);
            $('#TheForm').submit();
        });
    });
</script>

С учетом сказанного мне неловко. Возможно, стоит подумать, как это значение нужно или будет использоваться. Это действительно должно быть частью маршрута? Если нет, то вы можете полностью избежать манипулирования атрибутом action.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...