@ Html.DropDownList向控制器返回null

时间:2016-10-17 12:25:36

标签: c# asp.net drop-down-menu

我视图中的DropDownList会显示相关选项,但无论我选择什么,控制器中的folders都会获得价值null

为什么呢?如何修复它,以便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>
}

感谢。

4 个答案:

答案 0 :(得分:0)

要获取文件夹,请在下拉列表中输入相应的名称...

@ Html.DropDownList(&#34;夹&#34; ...

将导致您的DDL具有名称&#34;文件夹&#34; ...会尝试在您的方法中回发单个项目folders IEnumerable<SelectListItem> ...模型绑定器无法转换...

@ Html.DropDownList(&#34;夹&#34; ...

注意缺少的

现在名称对应于方法中的string folder参数...活页夹最有可能为您绑定...

如果您调试这样的错误,请使用调试器查看HttpContext.Request.Params,它会显示请求发生时的内容......

答案 1 :(得分:0)

参数类型应该从IEnumerable更改为String,因为视图只返回选定的项目NOT collection。

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

答案 2 :(得分:0)

只想提供另一种选择。如果您能够利用客户端解决方案,那么您可以使用隐藏的输入值和JQuery来加强这一点。

添加隐藏的输入控件:

5361792048656c6c6f20746f204d79204c6974746c6520467269656e64

添加一些Jquery:

Try this


 update 'lime_answers' set 'answer' = 'bigpony'
    where ('answer' = 'littlepony' AND 'language' = 'en')

答案 3 :(得分:0)

谢谢Sakthivel Ganesan,在将控制器中的IEnumerable<SelectListItem> folders更改为string folders之后,唯一要做的就是将我的Html.DropDownList Value更改为{{1像这样......

来自:

Text

要:

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