【问题标题】:Mapping ASP.NET MVC Model with html for radio buttons without using Htmlhelpers在不使用 Htmlhelpers 的情况下使用 html 为单选按钮映射 ASP.NET MVC 模型
【发布时间】:2017-05-11 02:59:36
【问题描述】:

我有一个如下定义的模型。

public class Holiday
    {
        public string Name { get; set; }
        public string Description { get; set; }
        public DateTime Date { get; set; }
        public HolidayType Type { get; set; }
        public bool AllYears { get; set; }
    }
    public enum HolidayType
    {
        HOLIDAY1 = 1,
        HOLIDAY2,
        HOLIDAY3
    }

在我看来,我正在编写 html 代码而不使用 htmlhelpers(特定项目原因)。 现在,我的名称、描述、日期等数据被绑定到模型字段,HolidayType Type 的单选按钮除外

下面是查看代码。如何让 Type 值自动填充我在页面中的输入。

@model Models.Holiday

@{
    ViewBag.Title = "Create";
}
<!DOCTYPE html>
<html>
<head>
    <title>Create Holiday</title>
    <script src="~/Content/Renderer/KendoUI/kendo.web.min.js"></script>
    <script>
        $(function () {

            $("#holiday").kendoDatePicker();
        });
    </script>
</head>
<body>
    <form id="createholiday" action="/holiday/holiday/create" method="post">
        <label for="Name">Holiday Name</label>
        <input type="text" id="name" name="Name" /><br />
        <label for="Description">Holiday Description</label>
        <input type="text" id="description" name="Description" /><br />
        <label for="Date" id="date">Date</label><br />
        <input id="holiday" name="Date"/><br />
        <label for="type">Type</label>
        <input type="radio" name="Type" value="Holiday 1">Holiday 1<br>
        <input type="radio" name="Type" value="Holiday 2">Holiday 2<br>
        <input type="radio" name="Type" value="Holiday 3">Holiday 3<br>
        <input type="submit" name="submit" value="Create" />
    </form>
</body>
</html>

【问题讨论】:

  • 如果您的“特定项目原因”是因为您从网页设计师那里获得了 HTML,那么这不是一个好的理由。更改代码以使用帮助程序。您以这种方式放弃了太多功能。否则,为什么要使用 MVC?只需使用网页

标签: html asp.net-mvc


【解决方案1】:

如果您的视图引擎是 razor,请更改 RdoBtns 的值,如下所示。我不确定,希望有效...

<input type="radio" name="Type" value="@Prj.Models.HolidayType.HOLIDAY1">Holiday 1<br>
<input type="radio" name="Type" value="@Prj.Models.HolidayType.HOLIDAY2">Holiday 2<br>
<input type="radio" name="Type" value="@Prj.Models.HolidayType.HOLIDAY3">Holiday 3<br>

【讨论】:

    【解决方案2】:
    <input type="radio" name="Gender" value="Male">Male
    <input type="radio" name="Gender" value="Female">Female
    

    在控制器中获取性别值

    public ActionResult YourAction(string Gender)
    {
      //Your Action Code Here
    }
    

    【讨论】:

      【解决方案3】:

      您可以通过在doc.ready 中混合使用 C# 和 jQuery 代码来实现这一点,

      <script>
          $(function () {
              $("#holiday").kendoDatePicker();
      
              <% if(Model.Type==HolidayType.HOLIDAY1) {%>
              $('input[value=Holiday 1]').attr('checked','checked');
              <%}else if (Model.Type==HolidayType.HOLIDAY2) {%>
              $('input[value=Holiday 2]').attr('checked','checked');
              //......
      
          });
      </script>
      

      对于文本框,

      $('#name').val('<%:Model.Name%>');
      $('#description').val('<%:Model.Description%>');
      

      【讨论】:

        【解决方案4】:

        如果你希望这些东西都在你的视图中,那么循环遍历Type 字符串值列表,如下所示:

        @{foreach(var holiday in new List<string>(){"Holiday 1", "Holiday 2", "Holiday 3"})
            {
                <input type="radio" name="Type" value="@holiday" @(Model.Type == holiday ? "checked='checked'" : "")>@holiday <br>      
            }
        }
        

        通常最好通过模型传入列表,您可以像这样访问一个新属性:

        @{foreach(var holiday in Model.HolidayLists) // ...etc
        

        但正如其他人所指出的那样,在放弃 HtmlHelpers 时,您正在丢掉框架中非常好的一部分。

        【讨论】:

          猜你喜欢
          • 2021-12-26
          • 1970-01-01
          • 2023-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多