【发布时间】:2018-05-10 17:44:29
【问题描述】:
我在模型中使用 ViewBag 列表从 DropDownListFor 获取数据时遇到问题。这是我的控制器代码:
[HttpGet]
public ActionResult JoinTeam()
{
var TeamList = _db.TeamModels.ToList();
SelectList list = new SelectList(TeamList, "Id", "TeamName");
ViewBag.TeamList = list;
return View();
}
Razor 视图表单如下所示:
@using (Html.BeginForm("JoinTeam", "Home", FormMethod.Post))
{
@Html.TextBoxFor(m => m.DisplayName, new { @class = "form-control form-control-lg", placeholder = "Enter your Battle Net ID" })
<br/>
@Html.DropDownListFor(m => m.TeamModel, (SelectList)ViewBag.TeamList, "- Select a Team to Join -", new { @class= "form-control form-control-lg" })
<br />
<button type="submit" class="btn btn-primary" style="width:100%;text-align:center;">Submit</button>
}
TextBoxFor 助手正在正确返回数据,但是我在下拉列表中选择的任何选项都不会传递到我的 post 方法中。有人有什么想法吗?
post 操作确实有效,因为它从模型中获取数据以获取 TextBoxFor 帮助,但它看起来像这样:
[HttpPost]
public async Task<ActionResult> JoinTeam(GuardianModel model)
{
try
{
string BNETId = model.DisplayName.Replace("#", "%23");
long memberId = 0;
if (ModelState.IsValid)
{
Bungie.Responses.SearchPlayersResponse member = await service.SearchPlayers(MembershipType.Blizzard, BNETId);
memberId = member[0].MembershipId;
}
using (var context = new CoCodbEntities1())
{
var g = new GuardianModel
{
MembershipId = memberId.ToString(),
DisplayName = BNETId,
MembershipType = 4,
TeamID = model.TeamModel.Id
};
TempData["UserMessage"] = ViewBag.TeamList.Id;
return RedirectToAction("Success");
}
}
catch
{
}
return View();
}
【问题讨论】:
-
您的帖子操作是什么样的?您的 post 请求的内容是什么(浏览器的调试器会显示给您)?
-
我用发布操作更新了我原来的问题。谢谢。
-
使用您共享的代码,模型绑定器应该能够将选定的选项值映射到您的 http post 操作方法的
GuardianModel参数的TeamModel属性。你 100% 确定它没有被填充吗? (你能在代码中放一个断点并检查值吗?) -
我用传递给 post 操作的值的片段更新了问题。
标签: c# asp.net-mvc