我有一个控制器帖子(索引POST),它返回一个局部视图(模态)。此部分视图是从其各自的Get ActionResult方法返回的模型加载数据。它忽略了这种方法。有没有办法让它从控制器加载数据?
[HttpGet]
public ActionResult Index()
{
return View();
}
[HttpPost]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public ActionResult Index(string date)
{
string[] dateSplit = date.Split(new char[] { 'T' });
DateTime objDate = Convert.ToDateTime(dateSplit[0]);
TempData["date"] = objDate;
return PartialView("~/Views/Home/Modal.cshtml");
}
这是部分View的Get方法,当Index post返回局部视图时,它不会加载。
[HttpGet]
public ActionResult Modal()
{
var content = db.Calendars.ToList();
if(TempData["date"] != null)
{
DateTime objDate = Convert.ToDateTime(TempData["date"]);
var contentDate = db.Calendars.Where(x => x.startDate == objDate).ToList();
return PartialView(contentDate);
}
return PartialView(content);
}
以下是视图:
@model IEnumerable<webby.Models.Calendar>
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" style="padding:20.5% 15%;">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
<h4 class="modal-title" id="myModalLabel">Events on @ViewBag.Date</h4>
</div>
<div class="modal-body">
<table>
@foreach(var item in Model)
{
<tr>
<td>
@Html.DisplayFor(model => item.events)
</td>
</tr>
<tr>
<td>
@Html.DisplayFor(model => item.type)
</td>
</tr>
<tr>
<td>
@Html.DisplayFor(model => item.content)
</td>
</tr>
}
</table>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
<script>
$('#myModal').modal();
</script>
运行应用程序后,一旦帖子返回局部视图,部分视图就会捕获一个空错误。
答案 0 :(得分:0)
返回PartialView(&#34;〜/ Views / Home / Modal.cshtml&#34;);
以上行不会调用你的Modal()动作。它只会尝试返回View(cshtml)。 (在这种情况下,你不会给视图一个模型。)
您可以通过索引(帖子)的最后一行来实现目标:
return RedirectToAction("Modal");
(也就是说,我对你正在努力完成的事情有点不清楚,所以更详细的描述可能有助于找到一个完整的解决方案。)
另外,我并不确切知道ScriptMethod属性是什么,但我很确定你不想让它装饰你的帖子。
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
答案 1 :(得分:0)
你不能有模态动作。当你打电话
return PartialView("~/Views/Home/Modal.cshtml");
它将简单地打开视图,无论你传递给它的是什么(写的绝对没有)。
您要做的是放置代码:
var content = db.Calendars.ToList();
if(TempData["date"] != null)
{
DateTime objDate = Convert.ToDateTime(TempData["date"]);
content = db.Calendars.Where(x => x.startDate == objDate).ToList();
}
在你的HttpPost Index动作中,并将模型传递给模态:
return PartialView("~/Views/Home/Modal.cshtml", content);