Получить значение элемента вида в MVC, которое не имеет отношения к модели - PullRequest
2 голосов
/ 17 ноября 2011

Когда у меня есть DropDownList, относящийся к модели вида, такой как:

@Html.DropDownListFor(model => model.Group.Name, selectList)

Я могу получить значения в контроллере следующим образом:

string SelectedGroupName = collection.GetValue("Group.Name").AttemptedValue;

Но теперь у меня есть DropDownList, который не имеет отношения к модели, но мне нужно его значение, это мой новый DropDown:

@Html.DropDownList("DDName", selectList)

Как я могу получить выбранное значение этого в контроллере?Есть ли скрытое поле или другая вещь для передачи значения из вида в контроллер?

Редактировать

Это мое мнение:

@model PhoneBook.Models.Numbers
@{
ViewBag.Title = "Delete";
}
<h2>
    Move And Delete</h2>
<fieldset>
    <legend>Label of Numbers</legend>
<div class="display-label">
        Delete Label And Move All Numbers with: @Html.DisplayFor(model =>
 model.Title)</div>
    <div class="display-field">
        To @Html.DropDownList("DDName", selectlist)
    </div>
</fieldset>
@using (Html.BeginForm()) {
    <p>
    <input type="submit" value="Move Numbers And Delete Label" name="MDbtn" />
     </p>
 }

Этомой контроллер:

[HttpPost]
    public ActionResult Delete(int id, FormCollection collection) {
var result = Request["DDName"];

//Use result

return RedirectToAction("Index");
}

но для результата установлено значение null, почему?

Ответы [ 4 ]

2 голосов
/ 21 ноября 2011

Я думаю, что это должно работать:

[HttpPost]
  public ActionResult Delete(int id, FormCollection collection)
    {
        var dd = collection.GetValue("DDName");
            .....
    }
0 голосов
/ 21 ноября 2011

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

Вы должны поставить его после BeginForm:

@using (Html.BeginForm()) {
   <div class="display-field">
     To @Html.DropDownList("DDName", selectlist)
   </div>

   <p>
     <input type="submit" value="Move Numbers And Delete Label" name="MDbtn" />
   </p>
 }

Тогда вы можете использовать FormCollection или назначенный параметр. Modelbinder по умолчанию будет работать с обоими подходами:

ActionResult Action (FormCollection collection, string DDName)

Вы можете легко проверить эти проблемы с помощью fiddler .

0 голосов
/ 17 ноября 2011

Думаю, что ddl должен быть в вашей форме, если вы хотите передать значение через коллекцию форм

0 голосов
/ 17 ноября 2011

Я думаю, все, что вам нужно сделать, это

На ваш взгляд:

поставьте @using (Html.BeginForm()) { над <fieldset>, поэтому @Html.DropDownList("DDName", selectlist) находится внутри него.

В вашем контроллере:

public ActionResult Delete(int id, FormCollection collection, string DDName) 
{ [...] }

И я вполне уверен, что MVC3 автоматически выдаст вам выбранное значение в качестве параметра для вашего контроллера.

Если это не сработает, вместо этого попробуйте object DDName в вашем контроллере.

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