【问题标题】:Razor view dropdown list for a model class in MVC3MVC3 中模型类的 Razor 视图下拉列表
【发布时间】:2012-07-11 20:39:02
【问题描述】:

我在 MVC3 中有两个模型类,一个用于 Services,它们具有这些属性

public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string Image { get; set; }
public int ChildOf { get; set; }

它还有一个 Entityframework 的数据库表

另一个模型是Quata,它具有这些属性

public int ID { get; set; }
public string Sender_Name { get; set; }
public string Description { get; set; }
.....
......
public Services Service_ID { get; set; }

它还有一个 Entityframework 的数据库表

我想创建一个 Razor(C#) 视图 (for Quata),用户可以在其中通过填写 html 表单发送 quata,但我想在其中显示一个 下拉列表Services ID 为 下拉值 和Services Name 作为下拉文本,它也来自服务数据库表。

我的问题是我应该如何通过@Html.DropDownListFor 创建动态下拉列表?并将该下拉列表中的选定数据发送到控制器?

【问题讨论】:

    标签: asp.net-mvc-3


    【解决方案1】:

    试试这个

    控制器:

     public ActionResult Create()
        {
            var Services = new Services();
    
            Services.Load(); //load services..
    
            ViewBag.ID = new SelectList(Services.ToList(), "Id", "Name");
    
    
            return View();
        }
    
    [HttpPost]
    public ActionResult Create(Quata Quata)
        {
            //save the data 
        }
    

    强类型视图:(使用 Razor)

    @model Quata
    
    @using (Html.BeginForm()) {
    <fieldset>
        <legend>Quata</legend>
    
        <div>
            @Html.LabelFor(model => model.Service_ID.ID, "Service")
        </div>
        <div>
            @Html.DropDownList("ID", String.Empty)
        </div>
    
    
        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
    }
    

    【讨论】:

    • 太棒了!有一个不使用 ViewBag 的选项,但您需要更改模型。
    • 真的!它是什么 ?你能给我这个主意吗?
    • ViewModel 模式,它允许控制器打包生成适当的 HTML 响应所需的所有信息。看到这个:msdn.microsoft.com/en-us/…
    【解决方案2】:

    看看@Html.DropDownListFor

    【讨论】:

      【解决方案3】:

      假设您的视图模型有一个所述服务的列表。

      以下可能对您有用(您可能在这里不需要 for 循环,编辑器应该消除它,但我遇到了一些奇怪的绑定问题)。

      在您的顶级视图中指向您的视图模型(@model Quata,假设 Quata 是您的视图模型)具有以下代码:

      @For i = 0 To Model.DropdownListInput.Count - 1
                      Dim iterator = i
                      @Html.EditorFor(Function(x) x.DropdownListInput(iterator), "EnumInput")
              Next
      

      在您的编辑器模板中(在视图文件夹下创建一个子文件夹,此下拉列表将在称为编辑器模板中,并将模板命名为您想要的任何模板,我的是 EnumInput)。

      在您的编辑器模板中,它应该指向您的服务模型(@model 服务)具有类似于以下代码的内容(替换您的适当变量名):

      @<div class="editor-label">
          @Html.LabelFor(Function(v) v.value, Model.DisplayName)
      </div>
      @<div class="editor-field">
          @Html.DropDownListFor(Function(v) v.value, New SelectList(Model.ParamEnums, "ValueForScript", "EnumValue"), "--Please Select A Value--")
          @Html.ValidationMessageFor(Function(v) v.value)
      </div> 
      

      将列表替换为您的列表,并将 lambda 值替换为您的 (@Html.DropDownListFor(x => x.id, New SelectList(x.ServiceList, "ID", "Name"), "--请选择 A值--") 或类似的东西。

      请注意,这段代码是用 VB 编写的,但它应该提供一个粗略的指导。

      【讨论】:

        猜你喜欢
        • 2023-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-04
        • 2012-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多