在我的应用程序中,它会根据每个用户显示一定数量的项目。我们只是说,用户登录并查看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>
...
}
}
答案 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