MVC 4下拉框默认值选定

5
我可以帮您翻译成中文:

我想在下拉列表中选择 policyId = 7 的默认值,但它没有选择那个值,我做错了什么?

控制器:

var pm = new ManagerClass();
IEnumerable<myClass> po = pm.GetDataFromDb();
IEnumerable<SelectListItem> Policies = new SelectList(po, "PolicyID", "PolicyName", new { PolicyID = 7 });
ViewBag.Policies = Policies;

视图:

@Html.DropDownListFor(m => m.PolicyID, ViewBag.Policies as IEnumerable<SelectListItem>, new { @class = "dropdown-field"})
3个回答

8

这是因为它实际上没有选择 SelectList 中的值。

首先,为了使代码更加规范化,将项目放入视图模型中以避免强制转换(这也是更好的实践方法):

public class MyModel
{
    public int PolicyID { get; set; }
    public List<SelectListItem> Policies { get; set; }
    //rest of your model
}

然后填充它:
var model = new MyModel();
model.Policies = po
    .Select(p => new SelectListItem
    {
        Text = p.PolicyName,
        Value = p.PolicyID.ToString(),
        Selected = p.PolicyID == currentPolicyId //change that to whatever current is
    })
    .ToList();

那么在您的看法中,应该如何操作:

@Html.DropDownListFor(m => m.PolicyID, Model.Policies, new { @class = "dropdown-field"})

7

只需将视图模型上的 PolicyID 属性设置为您想要预选的值即可:

var pm = new ManagerClass();
var po = pm.GetDataFromDb();
ViewBag.Policies = new SelectList(po, "PolicyID", "PolicyName");

viewModel.PolicyID = 7;
return View(viewModel);

由于您的DropDownList绑定到PolicyID属性(m => m.PolicyID),因此在决定预选哪个元素时将使用它的值。


在编辑页面这个可以工作,但是在添加页面却无法工作。我在添加页面中也像你一样给模型赋了id。 - Altaf Sami
1
我不知道你在说什么编辑和添加页面。这对我一直有效。展示一个完整的例子以便能够重现问题,这将有助于更好地理解你的情况。 - Darin Dimitrov
1
@DarinDimitrov 我看到了很多这样的问题,当人们把 SelectList 放在 ViewBag 中时,它无法选择。不管是转换还是其他什么原因,但解决方法通常只是将下拉框放入视图模型中。 - Mathew Thompson
抱歉,这是我的错误,我没有传递模型参数 View("ViewName", viewModel); 我只是使用了这个 View("ViewName"). @Mattytommo 我会给你加分,你的回答也很有帮助。 - Altaf Sami

0
如果您有一个静态菜单:
1- 创建以下类:
public static class StaticMenus
{

    public static List<string> GetGridRowsCount()
    {
        List<string> result = new List<string>();
        result.Add("3");
        result.Add("5");
        result.Add("10");
        result.Add("20");
        result.Add("25");
        result.Add("50");
        result.Add("100");

        return result;
    }
}

2- 将以下代码添加到您的控制器中:

ViewData["CountryList"] = new SelectList(StaticMenus.GetGridRowsCount(),"10");

3- 将以下代码添加到您的视图中:

@Html.DropDownList("MainGridRowsCount", ViewData["RowsCountList"] as SelectList)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接