0

我有一个要创建/保存的视图,而不是模型,而是使用枚举,如下所示。

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 发布的模型。

希望这些进一步的信息有助于了解我的情况。感谢你的帮助。

4

1 回答 1

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);
}
于 2013-03-22T02:25:25.933 回答