我有两个不同的视图和一个控制器。两者都有日期选择器组合框。它适用于一个视图但不适用于另一个视图。
模型#1:
public class TripDate
{
public List<DateTime> listDates { get; set; }
public DateTime? selectedDate { get; set; }
}
模型#2
public class AdminManageModel
{
public TripDate date { get; set; }
public string FormMessage { get; set; }
}
此代码在视图ChooseDate.cshtml
中正常工作@model TripManagement.Models.TripDate
<form asp-action="ChooseDate" method="post">
<select asp-for="selectedDate">
@if (Model.listDates.Count == 0)
{
<option>-</option>
}
else
{
foreach (var date in Model.listDates)
{
<option>@date.ToString("d")</option>
}
}
</select>
<button type="submit">Submit</button>
</form>
以上称此操作为:
[HttpPost]
public IActionResult ChooseDate(string selectedDate)
{
return RedirectToAction("TripManage", new { selectedDate = selectedDate });
}
字符串&#34; selectedDate&#34;有价值。我的问题是当我尝试使用另一个名为AdminManage.cshtml的视图调用此相同的操作时,字符串selectedDate为NULL。我在这个MVC业务上相当新,所以我想也许这与我不知道的某种幕后模型绑定有关。我尝试完全采取单独行动来做同样的事情:
AdminManage.cshtml
@model TripManagement.Models.AdminManageModel
<form asp-action="AdminManage" method="post">
<select asp-for="date.selectedDate">
@if (Model.date.listDates.Count == 0)
{
<option>-</option>
}
else
{
foreach (var date in Model.date.listDates)
{
<option>@date.ToString("d")</option>
}
}
</select>
<button type="submit">Submit</button>
</form>
调用以下操作(与上面的ChooseDate完全相同):
[HttpPost]
public IActionResult AdminManage(string selectedDate)
{
return RedirectToAction("TripManage", new { selectedDate = selectedDate });
}
在此操作中,selectedDate始终为NULL。我无法弄清楚为什么会发生这种情况。某些地方无法正确映射,但由于这是我的第一个MVC项目,我不知道如何进一步解决这个问题。两个视图ChooseDate.cshtml和AdminManage.cshtml之间的区别在于它们使用不同的模型,但模型属性应该在这里工作,不是吗?
我感谢任何帮助。
答案 0 :(得分:1)
我认为问题在于你改变了#34; asp-for&#34;属性,无需调整服务器端方法。
你的第一个例子与你的第二个例子不同:
<select asp-for="selectedDate">
<select asp-for="date.selectedDate">
这意味着您的表单会发布&#34; date.selectedDate&#34;而不是&#34; selectedDate&#34;因此你的模型绑定失败的原因。
尝试修改您的&#34; AdminManage&#34;方法:
public IActionResult AdminManage([Bind(Prefix="date")]string selectedDate)