我在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,但我想用{{1}显示下拉列表将下拉值和Services ID
作为下拉文字,它也来自服务数据库表。
我的问题是我应该如何通过Services Name
创建动态下拉列表?并将所选数据从下拉列表发送到控制器?
答案 0 :(得分:2)
试试这个
控制器:
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>
}
答案 1 :(得分:0)
看看@Html.DropDownListFor
答案 2 :(得分:0)
所以说你的viewmodel有一个所说的服务列表。
可能对你有用的东西如下(你可能不需要for循环,编辑应该消除它,但我有一些奇怪的绑定问题)。
在您的viewmodel(@model Quata,假设Quata是您的viewmodel)的顶级视图中有以下代码:
@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 =&gt; x.id,New SelectList(x.ServiceList,“ID”,“Name”),“ - 请选择价值 - “)或类似的东西。
请注意,此代码在VB中,但它应该提供一个粗略的指南。