POST多行radiobutton for ASP.NET - C#

时间:2018-02-22 02:15:59

标签: c# asp.net asp.net-mvc

在我的应用程序中,它会根据每个用户显示一定数量的项目。我们只是说,用户登录并查看3本书,并且每个项目都有单选按钮,表示可以选择或填充已选择的预设值的“购买”或“租赁”。我为每个单选按钮分配了值true或false。

所以在这里,我正在尝试发布每个单选按钮的值,但是当我单步执行时,我没有从单选按钮中获取任何内容。除了单选按钮的值之外,其他所有内容都会返回。我试过“FormCollection”,从ViewModel和Request.Form []中检索,但都没有用。

下面是一个示例代码:

视图模型

public class CustomerBooksViewModel
{
    public int? ID {get; set;}
    public int? CustomerID {get;set;}
    public string Title {get;set;}
    public string Author {get;set;}
    public string ISBN {get;set;}
    public bool? BuyRent{get;set;}
}

Controller - Request.Form示例

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Update()
{
    var ItemCustomerID = Request.Form["item.CustomerID"];
    var ItemTitle  = Request.Form["item.Title "];
    var ItemAuthor  = Request.Form["item.Author "];
    var ItemISBN  = Request.Form["item.ISBN "];
    var ItemBuyRent = Request.Form["item.BuyRent"];
}

查看 - (只是单选按钮的示例)

@using(Html.BeginForm("Update", "CustomerBooks", FormMethod.Post))
{
    @Html.AntiForgeryToken()
    @foreach (...)
    {
      ...
      <td>
      @Html.RadioButtonFor(modelItem => item.BuyRent, true, new{ @Name = "", id=""})) Buy
      @Html.RadioButtonFor(modelItem => item.BuyRent, false, new{ @Name = "", id = ""})) Rent
      </td>
      ...
    }
}

1 个答案:

答案 0 :(得分:-1)

首先,你应该使用Model Binder,除非你有正当理由不这样做。 所以,你的代码应该是:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Update(CustomerBooksViewModel model)
{
   // parameter model should be filled automatically with all properties from request
}

现在,关于属性BuyRent,它将不会在请求中发布,因为您已经将名称和id重写为空字符串。

应该是:

 @Html.RadioButtonFor(modelItem => item.BuyRent, true) Buy
 @Html.RadioButtonFor(modelItem => item.BuyRent, false) Rent