Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用razor dropdownlist将模型传回控制器_C#_Html_Asp.net Mvc_Asp.net Mvc 4_Razor - Fatal编程技术网

C# 如何使用razor dropdownlist将模型传回控制器

C# 如何使用razor dropdownlist将模型传回控制器,c#,html,asp.net-mvc,asp.net-mvc-4,razor,C#,Html,Asp.net Mvc,Asp.net Mvc 4,Razor,我有一个DropDownListFor控件,我想显示驻留在模型/类中属性中的显示值(这是规则类)。视图的模型实际上是这些模型/类的集合。但是,当我从DropDownList中选择项目时,我希望将整个模型作为参数发送回。我已经将其与以下代码完美结合,但是参数中的Name属性返回为null。其他属性都具有适当的值 查看代码: @model List<StockTrader.Web.Data.Rule> @{ ViewBag.Title = "Configure Rules";

我有一个
DropDownListFor
控件,我想显示驻留在模型/类中属性中的显示值(这是
规则
类)。视图的模型实际上是这些模型/类的集合。但是,当我从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 class Rule
{
    public int RuleID { get; set; }

    public string Name { get; set; }

    public int Value { get; set; }

    public bool IsDeleted { get; set; }
}
我们有剑道控制,所以如果另一个控制更合适,那是一个选择

我很乐意提供您可能需要的更多代码或信息

有什么想法或想法吗

编辑:

所以这就是我需要做的,被接受的答案把我带到了这一点,所以我将保持检查

视图代码(包括脚本):


您需要一个隐藏字段,并在客户端使用dropdownlist on change event来更新隐藏字段:

@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
规则
集合来自数据库,您可以通过使用id来获取规则名,通过查询正在运行的数据库来获取规则名。

可以通过使用

在模型类的
RuleID
属性上,为
UIHint
添加注释。它基本上允许您为属性呈现部分(cshtml)。因此,在局部上,您可以使用模板生成具有所需样式的dropdwon。当页面生成时。现在您可以对
RuleID
使用相同的
Html.DropDownListFor
,UI会为它生成一个下拉列表


这将避免使用额外的jQuery代码来获取下拉值,而且代码更加简洁且可测试。

规则类是什么样子的?更新了它并将其添加到问题中。好的,谢谢。我有点想这将是我需要尝试的第一件事,但不确定如何尝试。我会试试这个,然后再打给你。事实上,它不太管用。“m=>m.First()”只是在数据库中输入了第一个名字,而这恰好是我正在测试的名字。我去了futhur,结果它甚至没有击中那个。改变事件。我抛出了一个警报和调试器,当我更改下拉列表时,两者都没有触发。
@Html.DropDownListFor(m => m.First().RuleID, new SelectList(Model.AsEnumerable(), "RuleID", "Name"),new { id= "ruleid" })
@Html.HiddenFor(m=>m.First().Name,new { id="rulename" })
$("#ruleid").change(function(){

  $("#rulename").val($(this).text());

});