在我的程序中,我具有等级视图:
<html>
<head>
@{ViewBag.Title = "Rank";}
<link href="https://fonts.googleapis.com/css?family=Nunito|Raleway|Rubik" rel="stylesheet">
</head>
<body>
@model List<WebRanker.Models.MatchupModel>
<h2>Rank your list!</h2>
<h2 style="font-size: small">Choose your favorite of these two</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div id="rankradio">
@Html.RadioButtonFor(model => model[0].SelectedItem, Model[0].FirstItem, new { @checked = "checked" })
<label for="choice1">@Model[0].FirstItem.ItemName</label>
<br />
@Html.RadioButtonFor(model => model[0].SelectedItem, Model[0].SecondItem)
<label for="choice2">@Model[0].SecondItem.ItemName</label>
<div>
<button class="btn btn-success btn-large" type="submit">Next</button>
@Html.ActionLink("Cancel", "Index", "Collection", null, new { @class = "btn btn-danger btn-large" })
</div>
</div>
}
</body>
和在我的控制器中对get / post方法进行排名:
[HttpGet]
public ActionResult Rank(int id)
{
var service = GetCollectionService();
if (!TempData.Keys.Contains("matchuplist"))
{
TempData["matchuplist"] = service.GetMatchups(id);
}
return View(TempData["matchuplist"]);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Rank(MatchupModel matchup)
{
var service = GetCollectionService();
TempData["matchuplist"] = matchup.MatchupList.Skip(1); // Error here
service.IncreaseItemRankingPoints(matchup.SelectedItem.ItemID);
return View(matchup.SelectedItem.CollectionID);
}
还有一个名为MatchupModel的模型:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WebRanker.Data;
namespace WebRanker.Models
{
public class MatchupModel
{
public int ListID { get; set; }
public Item FirstItem { get; set; }
public Item SecondItem { get; set; }
public Item SelectedItem { get; set; }
public List<MatchupModel> MatchupList { get; set; }
}
}
当用户选择视图中的单选按钮之一并单击Submit时,我希望它设置模型的SelectedItem
属性,然后将其发送到控制器中的post方法。出于某种原因,我的模型的所有属性在到达控制器时都是空的,这导致它在到达TempData["matchuplist"] = matchup.MatchupList.Skip(1);
时出现错误System.ArgumentNullException: 'Value cannot be null. Parameter name: source'
时中断。
我到处都看过,不知道如何解决。我尝试将Request[string]
与RadioButton()
一起使用,而不是RadioButtonFor()
,但这只将模型的类型存储为字符串,而不是实际的模型。非常感谢您的帮助!
答案 0 :(得分:0)
在matchupmodel类中添加一个名为choice的属性,并在Radiobutton()中添加“ [0] .choice”,而不只是“ choice”。在字符串变量中获取该值并将其传递给您的服务