我有一个DropDownListFor
控件,我希望显示一个显示值,该值位于模型/类中的属性中(这是Rule
类。)视图的模型实际上是一个集合这些模型/类。但是,当我从DropDownList中选择项目时,我想将整个模型作为参数发回。我使用以下代码完美地工作,但参数中的Name属性返回null。其他属性都有适当的值。
查看代码:
@model List<StockTrader.Web.Data.Rule>
@{
ViewBag.Title = "Configure Rules";
}
<h2>@ViewBag.Title</h2>
<h4>Choose a rule to edit:</h4>
<form method="post" id="rulesform" action="SaveRules">
@Html.DropDownListFor(m => m.First().RuleID, new SelectList(Model.AsEnumerable(), "RuleID", "Name"))
<div style="margin-bottom: 15px;">
<label>Value:</label><br />
<input type="number" name="Value" style="margin-bottom: 15px;" /><br />
<button>Save Value</button>
</div>
控制器代码:
public ActionResult SaveRules(Rule model)
{
//do something
}
规则类:
public class Rule
{
public int RuleID { get; set; }
public string Name { get; set; }
public int Value { get; set; }
public bool IsDeleted { get; set; }
}
我们确实有Kendo控件,所以如果另一个控件更合适,那么这是一个选项。
我很乐意再提供您可能需要的代码或信息。
有什么想法或想法吗?
编辑:
事实证明这就是我需要做的事情,接受的答案让我达到了这一点,所以我要把它留下来检查。
查看代码(包含脚本):
@Html.DropDownListFor(m => m.First().RuleID, new SelectList(Model.AsEnumerable(), "RuleID", "Name"), new { id = "ruleid", @onchange = "CallChangefunc(this)" })
@Html.HiddenFor(m => m.First().Name, new { id = "rulename" })
function CallChangefunc(e) {
var name = e.options[e.selectedIndex].text;
$("#rulename").val(name);
}
答案 0 :(得分:2)
您需要一个隐藏字段,并在客户端使用更改事件的下拉列表来更新隐藏字段:
@Html.DropDownListFor(m => m.First().RuleID, new SelectList(Model.AsEnumerable(), "RuleID", "Name"),new { id= "ruleid" })
@Html.HiddenFor(m=>m.First().Name,new { id="rulename" })
和jquery代码:
$("#ruleid").change(function(){
$("#rulename").val($(this).text());
});
第二个选项isif Rule
集合来自数据库,您可以通过使用id来获取RuleName,方法是查询db in action。
答案 1 :(得分:0)
可以使用UIHint
来实现在模型类的RuleID
属性上,为UIHint
添加注释。它基本上允许您为属性渲染部分(cshtml)。因此,在partial上,您可以使用模板生成具有所需样式的dropdwon。生成页面时。现在,您可以对Html.DropDownListFor
使用相同的RuleID
,并为其生成下拉菜单。
这将避免使用额外的jQuery代码来获取下拉值,并且代码更简洁,更可测试。