2016-10-17 2 views
0

DropDownList на мой взгляд показывает соответствующие варианты выбора, но независимо от того, что я выбираю, folders в Контроллере получает значение null.@ Html.DropDownList return null to controller

Почему? Как я могу исправить это, так что folders в Контроллере получит выбранную опцию из DropDownList с точки зрения?

P.S - У меня нет модели.

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

//POST: Home 
[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Index(IEnumerable<HttpPostedFileBase> file, string folder, IEnumerable<SelectListItem> folders) 
{ 
    // some code here 
} 

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

@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    @Html.AntiForgeryToken(); 

    <div class="container"> 
     <div class="form-horizontal"> 
      <div class="form-group"> 
       <p></p> 
       <label for="file">Upload Photo:</label> 
       <input type="file" name="file" id="file" accept="image/*" multiple="multiple"/> 
      </div> 
      <div class="form-group"> 
       <div> 
        <label>Choose Album:</label> 
        @if (ViewBag.Folders != null) 
        { 
         @Html.DropDownList("folders", new SelectList(ViewBag.Folders as IEnumerable<SelectListItem>, "Value", "Text"), "--- Select Album ---", new { @class = "form-control" }) 
        } 

       </div> 
      </div> 
      <div class="form-group"> 
       <div> 
        <input type="submit" value="Upload" class="btn btn-default" /> 
       </div> 
      </div> 
     </div> 
    </div> 
} 

Спасибо.

+0

Так вы хотите, выбранную папку, правильно? Почему Action также ожидает ** папки **? –

+0

на самом деле ... почему он ожидает папку __AND__ папок? – DarkSquirrel42

+0

'folder' предназначен для создания новой папки (которая работает нормально),' folders' - это выбор папки из существующих папок. в любом случае, имена не релевантные, они могут все A и B ... B - данные из «DropDownList», а я получаю значение «null» вместо этого, то есть проблема – nirh1989

ответ

0

Спасибо вам Sakthivel Ганесан, после изменения IEnumerable<SelectListItem> folders в контроллере string folders, единственное, что осталось сделать, это изменить мой Html.DropDownListValue до Text вот так ...

от:

@Html.DropDownList("folders", new SelectList(ViewBag.Folders, "Value", "Text"), "--- Select Album ---", new { @class = "form-control" }) 

To:

@Html.DropDownList("folders", new SelectList(ViewBag.Folders, "Text", "Text"), "--- Select Album ---", new { @class = "form-control" }) 
0

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

@ Html.DropDownList («папка» ...

приведет к вашему DDL, чтобы иметь название «папки "... который будет пытаться отправлять обратно один элемент ... folders в методе является IEnumerable<SelectListItem> ... ModelBinder не способен преобразовать это ...

попробовать

@ Html.DropDownList («папка» ...

примечания недостающего s

теперь имя соответствует параметру string folder в вашем методе ... что связующее вещество, скорее всего, будет в состоянии связать для вас ...

при отладке ошибок как это, используйте отладчик, чтобы посмотреть на HttpContext.Request.Params, который покажет вам, что возвращается, когда был сделан запрос ...

+0

Так что мне нужно изменить тип 'flders' в контроллере от 'IEnumerable ' до 'string'? – nirh1989

0

Тип параметра должен быть изменен с IEnumerable на String, так как view возвращает только выбранный элемент NOT collection.

//POST: Home 
[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Index(IEnumerable<HttpPostedFileBase> file, string folder, string folders) 
{ 
    // some code here 
} 
+0

Я изменил его на 'string', как вы предложили, а не вместо' null', я получаю пустое значение типа «» ... все еще есть проблема – nirh1989

+0

* теперь * вместо .... – nirh1989

0

Просто хотел указать другой вариант. Если вы можете использовать клиентское решение, то вы можете немного согнуть его со скрытым входным значением и JQuery.

Добавить скрытый контроль ввода:

<input name="selectedFolder" type="hidden" value="" /> 

добавить некоторые JQuery:

+0

Я меньше понимаю JQuery, но. .. если я добавлю свое предложение в свой код, это сработает? выбранный элемент из моего «DropDownList» перейдет к контроллеру? – nirh1989

Смежные вопросы