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

时间:2018-02-06 18:45:18

标签: c# asp.net-mvc html.dropdownlistfor

我有一个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";

最后,我将使用查看中的下拉列表。

 <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个选择列表项对象,我应该只能指定索引,对吗?

1 个答案:

答案 0 :(得分:0)

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

我在viewmodel中添加了3个属性。

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

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

只需将助手改为:

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

这似乎可以胜任。