在create return dump中创建下拉列表

时间:2014-04-03 15:58:03

标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 razor

我已创建MVC5应用程序,我想在服务器属性的创建使用下拉列表中 我得到转储(错误是:"对象引用没有设置为对象的实例。")当我运行它时我应该怎么做?

我尝试

    <div class="form-group">
        @Html.LabelFor(model => model.SystemType, new { @class = "control-label col-md-2" })
        <div class="col-md-10">

                @Html.DropDownListFor(model => model.SystemType, Model.SystemType)
            </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.User, new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.User)
            @Html.ValidationMessageFor(model => model.User)
        </div>
    </div>

在模型类中我有以下代码

公共课Amta     {

    public string User { get; set; }

    public IEnumerable<SelectListItem> SystemType
    {
        get
        {
            return new[]
            {
                new SelectListItem {Value = "D", Text = "Dev"},
                new SelectListItem {Value = "p", Text = "Production"}
            };
        }
    }
}

2 个答案:

答案 0 :(得分:1)

检查DropDownListFor的重载。我觉得你需要使用这个。

DropDownListFor overload

第一个表达式应该是一个lambda表达式,它指向一个字符串返回类型的属性。这将返回选定的下拉元素。

第二个表达式应该是您要与下拉列表绑定的列表。

检查这两件事,让我知道它是否仍然不适合你。

这里使用lambda表达式中的SystemType属性以及列表。

答案 1 :(得分:1)

向Amta模型添加属性,以便在回发表单时收集所选值。

@Html.DropDownList("SelectedSystemType", Model.SystemType)

OR

@Html.DropDownListFor(model => model.SelectedSystemType, Model.SystemType)

public class Amta {

    public string User { get; set; }

    public string SelectedSystemType { get; set; }

    public IEnumerable<SelectListItem> SystemType
    {
        get
        {
            return new[]
            {
                new SelectListItem {Value = "D", Text = "Dev"},
                new SelectListItem {Value = "p", Text = "Production"}
            };
        }
    }
}

##以下是我测试##

的方法

控制器

public ActionResult Test()
{
    return View(new TestModel());
}

[HttpPost]
public ActionResult Test(TestModel model)
{
    return View(model);
}

视图

@model DemoKendoMvc.Models.TestModel
@{
    ViewBag.Title = "Test";
}

@using (Html.BeginForm("Test", "Home", FormMethod.Post))
{
    @Html.DropDownListFor(model => model.SelectedSystemType, Model.SystemType)
    @Html.EditorFor(model => model.User)
    @Html.ValidationMessageFor(model => model.User)
    <input type="submit" value="Submit" />
}

模型

public class TestModel
{
    public string User { get; set; }

    public string SelectedSystemType { get; set; }

    public IEnumerable<SelectListItem> SystemType
    {
        get
        {
            return new[]
            {
                new SelectListItem {Value = "D", Text = "Dev"},
                new SelectListItem {Value = "p", Text = "Production"}
            };
        }
    }
}

发布值

enter image description here

##更新了评论##

中提供的代码
public ActionResult Create()
{
    return View(new TestModel());
}

[HttpPost]
public ActionResult Create(TestModel model)
{
    try
    {
        // TODO: Add insert logic here

        return RedirectToAction("Index");
    }
    catch
    {
        return View();
    }
}

如果您在创建视图时使用创建模板,则 SelectedSystemType 将创建为 EditorFor 。因此,您需要将其更改为 DropDownListFor

@Html.DropDownListFor(model => model.SelectedSystemType, Model.SystemType)