首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ModelBinding绑定SelectedItem

ModelBinding绑定SelectedItem
EN

Stack Overflow用户
提问于 2019-06-27 23:00:15
回答 1查看 22关注 0票数 0

如何使用ModelBinding将SelectedItem绑定到我的模型?

首先,我创建了一个简单的模型:

代码语言:javascript
复制
public class Element
{
    public string Name { get; set; }
    public int Value { get; set; }
}
public class MyModel
{
    public Guid ContactID { get; set; }
    public List<Element> Collection { get; set; }

    public IEnumerable<SelectListItem> SelectList
    {
        get
        {
            return Collection.Select
            (
                e => new SelectListItem
                {
                    Text = e.Name,
                    Value = e.Value.ToString()
                }
            );
        }
    }

    public Element SelectedElement { get; set; }

}

然后在我的控制器中初始化它:

代码语言:javascript
复制
    public ActionResult Test()
    {
        var model = new MyModel {ContactID = Guid.NewGuid(), Collection = new List<Element>() };
        var rand = new Random();

        while (model.Collection.Count < 10)
        {
            var number = rand.Next(100);
            model.Collection.Add(new Element {Value = number, Name = number.ToString()});
        }

        return View(model);
    }

并在我的视图中显示它:

代码语言:javascript
复制
@using (Html.BeginForm("TestPostBack", "Home"))
{
    @Html.AntiForgeryToken()

<div class="form-horizontal">
    <h4>MyModel</h4>
    <hr />
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
    <div class="form-group">
        @Html.LabelFor(model => model.ContactID, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.ContactID, new { htmlAttributes = new { @class = "form-control" } })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.Collection, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownListFor(model => model.SelectedElement, Model.SelectList)
        </div>
    </div>

    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Save" class="btn btn-default" />
        </div>
    </div>
</div>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

当按下表单上的submit按钮时,我想按下控制器上的TestPostBack。这也没问题。但是如何在我的模型中填充SelectedElement属性呢?我希望它是下拉列表中所选项目的值。

代码语言:javascript
复制
public ActionResult TestPostBack(MyModel model)
{
    throw new NotImplementedException();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-27 23:10:47

我不认为获取整个对象会很简单。不是不可能,只是不容易。这里的问题是,与HTML select元素相对应的drop只返回选项的选定值,而不是文本。因此,您可能会想到截取表单post请求并在其中添加文本,但这感觉有点麻烦。

最直接的方法是只取回值:

代码语言:javascript
复制
public class MyModel
{
    ...
    public int SelectedElementValue { get; set; }
}

Html.DropDownListFor(model => model.SelectedElementValue, Model.SelectList)

然后通过值在元素中查找对象。希望它的价值是独特的:

代码语言:javascript
复制
public ActionResult TestPostBack(MyModel model)
{
    // load list of elements
    Element selectedElement = //look up element by model.SelectedElementValue
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56793882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档