【发布时间】:2018-02-19 01:35:29
【问题描述】:
我正在我的 HTTPGet 中构建一个 IEnumerable 并将其传递给我的视图。我的问题是使用 hiddenfor 将所选信息返回到控制器。
[HttpGet]
public ActionResult Index(int id)
{
RANKDModel model = new RANKDModel();
model.thingList = new List<thingsModel>();
List<SelectListItem> thingRank = new List<SelectListItem>();
var tblThingGroup = db.tblThingGroup.Where(x => x.thingCollectionID == id).Include(t => t.tblThing).Include(t => t.tblThingCollection).OrderBy(x => x.displayOrder);
model.thingRank = new SelectList(thingRank, "Value", "Text");
int i = 1;
foreach (var thing in tblThingGroup)
{
thingRank.Add(new SelectListItem()
{
Value = thing.tblThing.thingID.ToString(),
Text = i.ToString()
});
model.thingRank = new SelectList(thingRank, "Value", "Text");
thingsModel things = new thingsModel();
things.thingID = thing.tblThing.thingID;
things.thingName = thing.tblThing.thingName;
things.thingImgPointer = thing.tblThing.thingImgPointer;
model.thingList.Add(things);
i++;
}
return View(model);
}
[HttpPost]
public ActionResult Index(RANKDModel model, IEnumerable<SelectListItem> thingRank)
{
//check model.Selecteditem
return View(model);
}
我的视图显示下拉列表,但我似乎无法将值传递回 Post 上的控制器。下面是我的看法。注释行是失败的尝试。我宁愿不在这里使用 ajax。由于我的值和我的文本字段是我所需要的,我觉得我应该能够将它们传递回控制器,即使它们不是模型的一部分(这很好,但我在那里也没有成功。)
@using (Html.BeginForm())
{
<div class="col-md-8">
@Html.TextBoxFor(modelItem => Model.firstName, new { @class = "form-control" })
@Html.TextBoxFor(modelItem => Model.lastName, new { @class = "form-control" })
</div>
<table class="table">
@Html.HiddenFor(modelItem => Model.thingRank)
@for (int i = 0; i < Model.thingList.Count; i++)
{
string imagePointer = "/Areas/RANKD/thingImages/" + Model.thingList[i].thingImgPointer;
<tr>
<td>
@Html.HiddenFor(modelItem => Model.thingList[i].thingID)
@Html.DropDownListFor(modelItem => modelItem.thingRank, (IEnumerable<SelectListItem>)ViewBag.thingRank, "Rank it Bro.") @*Model.thingRank.Items as IEnumerable<SelectListItem>)*@
@*@Html.HiddenFor(modelItem => modelItem.thingRank[Model.thingRank(i)].Value)*@
@Html.HiddenFor(modelItem => modelItem.thingRank[Model.thingRank.IndexOf(i)].Value)
@*@Html.HiddenFor(modelItem => modelItem.thingRank)*@
@Html.DisplayFor(modelItem => Model.thingList[i].thingName)
</td>
<td>
<img src="@imagePointer" alt="@Model.thingList[i].thingName" height="75" />
</td>
</tr>
}
</table>
<input type="submit" value="RANK IT" class="btn btn-default" />
}
我只是在 hiddenfor 中遗漏了一些东西吗?
在我的 RANDModel 中添加代码
[Serializable]
public class RANKDModel
{
public string firstName { get; set; }
public string lastName { get; set; }
public List<thingsModel> thingList { get; set; }
public IEnumerable<SelectListItem> thingRank { get; set; }
}
【问题讨论】:
-
有大量关于如何在 asp mvc 中使用下拉列表的教程。为什么你需要 post 中的所有项目?你只需要用户选择的项目,就是这样。
-
我同意我只需要选择的项目。在我的 for 循环中,我试图用 hiddenfor 来解决这个问题。那是我要去错了吗?我看过很多例子,但似乎没有一个适合我的情况。
-
所选项目将在
model.thingRank中。我需要查看您在RANKDModel中的代码 -
我已在问题底部添加了模型。谢谢。
-
您在这里所做的一切都错得离谱,根本不知道从哪里开始。您生成
IEnumerable<SelectListItem>的代码甚至没有意义。我建议您从阅读以下内容开始,至少了解一些基础知识 - Post an HTML Table to ADO.NET DataTable
标签: c# .net asp.net-mvc razor