【问题标题】:Set radio button checked item from ASP MVC 3 controller从 ASP MVC 3 控制器设置单选按钮选中项
【发布时间】:2013-04-10 20:10:11
【问题描述】:

下面是我视图中出现的一组单选按钮。我可以通过这个简单的代码检索所选项目

string criteria = filter["criteria"];

但是我不知道如何保留所选项目。一旦控制器回发到视图,默认单选按钮总是被选中。

    <form method="post">
        @Html.TextBox("searchValue", ViewBag.CurrentFilter as string, new { placeholder = "Search" })
        <input type="image" src="@Url.Content("~/Content/Images/Filter.bmp")" alt="Filter" style="padding-top: 0px;" />
            <span class="error" style="clear: both;">
                @ViewBag.ErrorMessage
           </span>
        <a href="#" style="padding-left: 30px;"></a>
        <br />
        <br />
        <input type="radio" name="criteria" id="bankName" value="bankName" checked="true"/>
        <label for="bankName">Bank Name</label>
        <input type="radio" name="criteria" id="EPURL" value="EPURL" />
        <label for="EPURL">EPURL</label>
        <input type="radio" name="criteria" id="specialNotes" value="specialNotes" />
        <label for="SpecialNotes">Special Notes</label>
        <input type="radio" name="criteria" id="email" value="email" />
        <label for="email">Email</label>
        <input type="radio" name="criteria" id="dynamicsId" value="dynamicsId" />
        <label for="dynamicsId">Dynamics ID</label>
        <input type="radio" name="criteria" id="stat" value="stat" />
        <label for="fixed">Agent ID &nbsp;</label>
    </form>

【问题讨论】:

  • 对不起,我在下面找到了一个更简单的解决方案。不得不等待几天才能接受答案。

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-2 radio-button postback


【解决方案1】:

这个问题的答案非常简单。我犯的第一个错误是没有使用@Html 控件。其次是使用FormCollection 作为索引控制器的输入参数。通过将单选按钮更改为以下内容:

        @Html.RadioButton("criteria", "bankName", true)<span>Bank Name</span>
        @Html.RadioButton("criteria", "EPURL")<span>EPURL</span>
        @Html.RadioButton("criteria", "specialNotes")<span>Special Notes</span>
        @Html.RadioButton("criteria", "email")<span>Email</span>
        @Html.RadioButton("criteria", "dynamicsId")<span>Dynamics ID</span>
        @Html.RadioButton("criteria", "stat")<span>Agent ID</span>

以及控制器中Index方法的签名:

public ActionResult Index(string criteria, string searchValue)

回发后选中的单选按钮保持选中状态。

【讨论】:

    【解决方案2】:

    不要刷新整个页面...使用 JQuery 并进行 Ajax 调用

    $.ajax({
        url: "Your Url",
        async: true,
        type: 'POST',
        data: JSON.stringify({ ParameterName: Param_Value }),
        beforeSend: function (xhr, opts) {
    
        },
        contentType: 'application/json; charset=utf-8',
        complete: function () {  },
        success: function (data) {
            //Success Callback
            //Code to set value to your control
        }
    });
    

    【讨论】:

      【解决方案3】:

      如果我正确理解您的需求,您可以在 ViewBag(或 ViewData 或 Model)中设置您想要检查的项目的名称,并在您的视图中相应地设置 checked 属性。像这样的:

       <form method="post">
              @Html.TextBox("searchValue", ViewBag.CurrentFilter as string, new { placeholder = "Search" })
              <input type="image" src="@Url.Content("~/Content/Images/Filter.bmp")" alt="Filter" style="padding-top: 0px;" />
                  <span class="error" style="clear: both;">
                      @ViewBag.ErrorMessage
                 </span>
              <a href="#" style="padding-left: 30px;"></a>
              <br />
              <br />
      
              @{
                  var checkedItemName = ViewBag.CheckedItemName;
              }
              <input type="radio" name="criteria" id="bankName" value="bankName" checked="@((checkedItemName == "bankName"))"/>
              <label for="bankName">Bank Name</label>
              <input type="radio" name="criteria" id="EPURL" value="EPURL" checked="@((checkedItemName == "EPURL"))"/>
              <label for="EPURL">EPURL</label>
              <input type="radio" name="criteria" id="specialNotes" value="specialNotes" checked="@((checkedItemName == "specialNotes"))"/>
              <label for="SpecialNotes">Special Notes</label>
              <input type="radio" name="criteria" id="email" value="email" checked="@((checkedItemName == "email"))"/>
              <label for="email">Email</label>
              <input type="radio" name="criteria" id="dynamicsId" value="dynamicsId" checked="@((checkedItemName == "dynamicsId"))"/>
              <label for="dynamicsId">Dynamics ID</label>
              <input type="radio" name="criteria" id="stat" value="stat" checked="@((checkedItemName == "stat"))"/>
              <label for="fixed">Agent ID &nbsp;</label>
          </form>
      

      【讨论】:

      • 这会将正确的值传递回视图,但由于某种原因,最后一个单选按钮总是被选中。
      • 这太奇怪了,因为如果我选择 EPURL,这就是特定单选按钮的呈现方式:&lt;input type="radio" name="criteria" id="EPURL" value="EPURL" checked="True"/&gt;
      猜你喜欢
      • 2012-07-24
      • 2017-06-15
      • 2018-01-23
      • 1970-01-01
      • 2013-05-18
      • 2018-07-12
      • 1970-01-01
      • 1970-01-01
      • 2016-10-30
      相关资源
      最近更新 更多