如何读取选定的HTML值.HTTPPOST中的RadioButtonFor

本文关键字:HTML HTTPPOST RadioButtonFor 中的 何读取 读取 | 更新日期: 2023-09-27 18:09:22

我在SO上读了很多答案,但是它不适合我。

我有模型:

class SomeOrder
{
     public string TypeDrink {get;  set;}
}

控制器:

public ViewResult Edit(int id)
{
  SomeOrder se = newSomeOrder{ TypeDrink=3 };
  return View(se);
}

和观点:

@Html.EditorForModel   @Html.RadioButtonFor(m=>m.TypeDrink, "1") Tea
@Html.RadioButtonFor(m=>m.TypeDrink, "2") Coffee  
@Html.RadioButtonFor(m=>m.TypeDrink, "3") Juice

如何在[HTTPPOST]方法中读取单选按钮的选择值?在我的HTTPPOST方法中,预选的值被存储,而不是用户选择的值:

[HTTPPOST]
public ViewResult Edit(SomeOrder se) 
 {
   string chosenValue=se.TypeDrink;// always the old selected value
 }

如何读取选定的HTML值.HTTPPOST中的RadioButtonFor

您的视图在单选按钮之前包含@Html.EditorForModel()EditorForModel()将为模型中的每个属性生成表单控件,因此它将为属性TypeDrink生成控件。根据应用于您的属性的属性,以及您可能拥有的任何EditorTemplates,它可能在隐藏输入中生成。

因为您的表单随后首先发回由EditorForModel生成的输入的名称/对值,输入的值将绑定到您的模型,而DefaultModelBinder将忽略单选按钮的值。

从视图中删除EditorForModel,模型将根据单选按钮的值进行绑定。

如果你的post action是

[HttPost]
public ViewResult Edit(SomeOrder model)
{
  // should get it like
  model.TypeDrink;
}

这是利用mvc中的模型绑定。

您也可以查看Request.Form["TypeDrink"]来获取该值,但不建议使用

您的模型是:

     using System;
     using System.Collections.Generic;
     using System.Linq;
     using System.Web;
     namespace radiotest.Models
     {
        public class SomeOrder
        {
            public string TypeDrink { get; set; }
        }
     }

你的视图是index。cshtml

    @model radiotest.Models.SomeOrder
     @{
        ViewBag.Title = "Index";
        Layout = "~/Views/Shared/_Layout.cshtml";
      }
     @using (Html.BeginForm())
     {
        <fieldset>
            <div class="editor-field">
                @Html.RadioButtonFor(m => m.TypeDrink, "1") Tea
                @Html.RadioButtonFor(m => m.TypeDrink, "2") Coffee
                @Html.RadioButtonFor(m => m.TypeDrink, "3") Juice
            </div>
            <div> <input type="submit" value="Submit" /></div>
        </fieldset>
     }

你的控制器在HTTP Get和Post是:

    using radiotest.Models;
     using System;
     using System.Collections.Generic;
     using System.Linq;
     using System.Web;
     using System.Web.Mvc;
     namespace radiotest.Controllers
     {
        public class TestController : Controller
        {
            public ActionResu`enter code here`lt Index()
            {
                 SomeOrder se = new SomeOrder{ TypeDrink="3" };
                 return View(se);
            }
            [HttpPost]
            public ActionResult Index(SomeOrder model)
            {
                //model.TypeDrink gives you selected radio button in HTTP POST
                SomeOrder se = new SomeOrder {TypeDrink = model.TypeDrink };
                return View(se);
            }
        }
     }