c# - 使用 ViewBag 列表从 DropDownListFor 获取所选值
问题描述
我在模型中使用 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();
}
解决方案
从您共享的屏幕截图中,看起来TeamModel
property 是 type 的虚拟导航属性TeamModel
。你不应该为加载它而烦恼。您只需要担心加载外键属性值(通常是一个简单的类型,如 an orso int
.
您的 SELECT 元素名称应该是TeamID
. 提交表单时,它会将选定的选项值映射到TeamID
模型的属性值,即外键属性。
@Html.DropDownListFor(m => m.TeamID, (SelectList)ViewBag.TeamList,
"- Select a Team to Join -", new { @class= "form-control form-control-lg" })
虽然这可能会解决问题,但最好使用视图模型而不是使用实体类。
推荐阅读
- sql-server - 在使用 Ola Hallengren 创建备份后删除 Linux SQL Server 2017 的旧数据库备份?
- batch-file - 在 dos4gw 中回显 %errorlevel%
- reactjs - React Apollo Client - 在查询数据进入缓存之前修改它
- google-api - 执行 Batch API 以将多个用户添加到多个组
- sql - 如何在此查询的这一部分中使用标签?
- vb.net - Lotusscript 将 base64 编码的字符串保存到文件 (DLL)
- mysql - 在python中插入多个数据框时没有从mysql获取值
- javascript - 如何修复此代码中的“前缀未定义”
- c# - 如何使用 ASP.NET 技术在 Facebook 墙上分享 .mp4 视频?
- r - `rhandsontable` 包中的 `hot_to_r()` 函数在“正常”.R 脚本中不起作用 - 如何检查闪亮数据的方面?