繁体   English   中英

C#MVC-DropDownListFor不选择默认的ViewModel数据

[英]C# MVC - DropDownListFor does not select default ViewModel data

我有一个DropdownListFor ,用于保存标签列表。 重要的是要说我将拥有3个相同的下拉菜单,因为每个请求最多可以关联3个标签。

我正在使用ViewModel方法,并且希望远离ViewBag

这是我的视图模型 标签列表包含所有标签。 选定的标签保存与请求对象当前关联的所有标签。

public class editRequestViewModel
{
    public Request userRequest { get; set; }
    public List<SelectListItem> Tags { get; set; }
    public List<SelectListItem> SelectedTags { get; set; }
}

这是我特定于标签的控制器

  public ActionResult Edit(int id)
    {
        try
        {
            if (ModelState.IsValid)
            {
                domainUser GetAllUsers = new domainUser();

                using (var db = new DAL.HelpDeskContext())
                {


                    var query = (from m in db.Requests
                                 where m.ID == id
                                 select new editRequestViewModel()
                                 {

                                 userRequest = m,


                                 Tags = (from x in db.Tags
                                             select new SelectListItem()
                                            {
                                                Text = x.Name,
                                                Value = x.ID.ToString()
                                            }).ToList().OrderBy(x => x.Text).ToList(),

                                 SelectedTags =  (from x in db.AssociatedTags
                                                      join u in db.Tags on x.TID equals u.ID into cc
                                                      from c in cc.DefaultIfEmpty()
                                                      where x.RID == id
                                                      select new SelectListItem()
                                                      {
                                                        Text = c.Name,
                                                        Value = c.ID.ToString()

                                                      }).ToList().OrderBy(x => x.Text).ToList()
                                 }).FirstOrDefault();

                    return View(query);
                }
            }

            else
                return View();
        }
        catch (Exception ex)
        {
            return View("Error", new HandleErrorInfo(ex, "Change", "Browse"));
        }
    }

我试图像这样在控制器中设置值,但不会改变结果。 (15是标签的可能ID)

query.SelectedTags[0].Value = "15";

最后,这就是我如何使用View中的下拉列表。

 <div class="form-group">
            @Html.Label("Tag One", htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-2">
                @Html.DropDownListFor(model => model.SelectedTags[0].Value, Model.Tags, "Select Tag", new { @class = "form-control " })
            </div>

        </div>

使用上面的代码,下拉列表默认为“选择标签”。 显然,如果我将一个值拉入SelectedTags[0].Value ,则希望该值成为首次加载页面时的默认值。

某事告诉我问题的索引方式,但是我似乎无法弄清楚原因。 由于我的列表中有3个选择列表项对象,因此我应该能够只指定索引,对吗?

遵循@MikeMcCaughan和@RyanWilson的指导,我认为我看到了可行的解决方案。

我在视图模型中添加了3个属性。

然后,在控制器中,我使用SelectedTags查询将每个值设置为可能的3个标签ID。

query.tagSelOne = query.SelectedTags[0].Value;

只需将Helper更改为:

@Html.DropDownListFor(model => model.tagSelOne, Model.Tags)

这似乎可以完成工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM