我有一个想要创建/保存的视图,而不是模型使用枚举如下。
public enum RulesEnum
{
StopAtLight = 1,
StopAtStreet,
StopAtCrossWalk,
WaitAtCrossWalk,
}
模特
public class RulesModel
{
public RulesEnum Rules { get; set; }
public string Comment { get; set; }
// some other props that you have
}
视图
@model RulesModel
@using (Html.BeginForm()) {
<input type="radio" name="Rules" value="0" id="Rules1_No" />
<input type="radio" name="Rules" value="1" id="Rules1_Yes" />
<label for="Rules1">Stop at Light</label>
<input type="radio" name="Rules" value="0" id="Rules2_No" />
<input type="radio" name="Rules" value="1" id="Rules2_Yes" />
<label for="Rules2">Stop at Street</label>
<input type="radio" name="Rules" value="0" id="Rules3_No" />
<input type="radio" name="Rules" value="1" id="Rules3_Yes" />
<label for="Rules3">Stop at CrossWalk</label>
<input type="text" name="Rules" id="Rules4" />
<label for="Rules4">Wait at CrossWalk</label>
<input type="submit" value="Submit" />
}
控制器动作
[HttpPost]
public ActionResult TheMethodThatAcceptsTheInput(RulesModel model)
{
// do as you wish here, I assume you already know what to do here
// at this point, if the user selects a radio button
// then the model.Rules will show it, as an enum value of course
return View(model);
}
这个前面的代码段只是演示了每个枚举值都有与之关联的不同控件。所以基本上我想为每个枚举值定义不同的控件。
我想创建一个KeyValuePairs列表,这样我就可以将用户为每个枚举值选择的值发送回控制器。但是,由于我的知识有限,我只知道如何将定义良好的模型发送回控制器。当用户按下提交按钮时,如何建立我的KeyValuePairs列表并将它们发送回控制器?
我已经研究了各种替代方案,例如AutoMapper和ViewModels,但我不认为我的具体问题与这些解决方案有关。我是相当新的,有人可以提供一些解决这个问题的最佳方法的指导吗?
谢谢!
更新: 看看Von的例子,我已经修改了一下。唯一的区别是我不想要枚举列表(意思是4个枚举值= 4个单选按钮),但我希望每个枚举值都是一个问题,例如:
停在光明之下?是/否(2个单选按钮) 在街上停下来?是/否(2个单选按钮) 在人行横道停下来?是/否(2个单选按钮) 人行横道? 30秒(文本框)
我不知道该怎么做才是用户点击提交。我需要以某种方式查看每个问题并构建列表以发送给控制器,使其看起来如下所示:
[(StopAtLight, "false"),
(StopAtStree, "true"),
(StopAtCrossWalk, "false"),
(WaitAtCrossWalk, "40")]
当用户按下提交时,我不确定如何构建此列表,因为它期望一个类似于Von发布的模型。
希望这些进一步的信息有助于了解我的情况。谢谢大家的帮助。
答案 0 :(得分:0)
我不确定你想要用KeyValuePairs做什么,但根据你问题中的标记,你想要在页面上显示枚举作为选项,然后有一些文本框用于输入,他们将它们提交给你的控制器。如果是这种情况,那么您可以执行以下操作:
模特
public class RulesModel
{
public bool StopAtLight { get; set; }
public bool StopAtStreet { get; set; }
public bool StopAtCrossWalk { get; set; }
public string WaitAtCrossWalk { get; set; }
// some other props that you have
}
视图
@model RulesModel
@using (Html.BeginForm()) {
<h1>Stop at Light</h1>
<input type="radio" name="StopAtLight" value="false" id="Rules1_No" />
<label for="Rules1_No">No</label>
<input type="radio" name="StopAtLight" value="true" id="Rules1_Yes" />
<label for="Rules1_Yes">Yes</label>
<h1>Stop at Street</h1>
<input type="radio" name="StopAtStreet" value="false" id="Rules2_No" />
<label for="Rules2_No">No</label>
<input type="radio" name="StopAtStreet" value="true" id="Rules2_Yes" />
<label for="Rules2_Yes">Yes</label>
<h1>Stop at CrossWalk</h1>
<input type="radio" name="StopAtCrossWalk" value="false" id="Rules3_No" />
<label for="Rules3_No">No</label>
<input type="radio" name="StopAtCrossWalk" value="true" id="Rules3_Yes" />
<label for="Rules3_Yes">Yes</label>
<h1>Wait at CrossWalk</h1>
<input type="text" name="WaitAtCrossWalk" id="WaitAtCrossWalk" />
<input type="submit" value="Submit" />
}
控制器动作
[HttpPost]
public ActionResult TheMethodThatAcceptsTheInput(RulesModel model)
{
// if model.StopAtLight == false then the user selected No otherwise it was Yes
// same goes for the rest of the radio buttons
return View(model);
}