我有以下情况:
@{Html.RenderAction("CreateComment", "Order", new { orderId = Model.Id, orgId = Model.OrganisationId });}视图上调用DetailsDetails视图RedirectToAction时,我得到:
不允许子操作执行重定向操作。为了解决这个问题,我尝试调用Redirect的insead
return View("Details", new { id = viewModel.OrderId });但现在我看到了这个奇怪的错误:
传递到字典中的模型项的类型是‘<>f_AnonyousType4’1System.Int 32‘,但是该字典需要一个类型为'ViewOrderViewModel’的模型项。
这似乎是在抱怨我没有把ViewModel传递到视图中。
但是,如果您查看我正在调用的Details控制器操作,它实际上接受一个int并在那里构建ViewModel (我可以看到,在进行上述更改后,这个操作仍然被击中):
public ActionResult Details(int id)
{
var orderViewModel = orderManager.Select(id);
return View(orderViewModel);
}这里发生什么事情?为什么我不能像通常那样使用id路由值调用操作呢?我的ViewOrderViewModel怎么了
如有任何建议,敬请见谅。
更新以添加代码
阶Details.cshtml
这就是我正在驱散comments表单的地方,也是我需要在这一切结束时重定向的地方。url看起来像loks ~/order/details/14。
错误似乎是在行@{Html.RenderAction("CreateComment", "Order", new { orderId = Model.Id, orgId = Model.OrganisationId });}上抛出的。
不允许子操作执行重定向操作。
@using Web.Resources.Headers
@model Web.Models.ViewOrderViewModel
<div class="container">
<h4>@Model.Name</h4>
<hr />
<div class="col-xs-12">
<h4>Comments</h4>
<hr />
<div class="col-xs-12 col-sm-6">
@foreach (var comment in Model.Comments)
{
@comment.Content
}
</div>
<div class="col-xs-12 col-sm-6">
@{Html.RenderAction("CreateComment", "Order", new { orderId = Model.Id, orgId = Model.OrganisationId });}
</div>
</div>
</div>CreateComment.cshtml
发表评论的表格
@using Microsoft.AspNet.Identity
@model Web.Models.NewCommentViewModel
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.OrderId)
@Html.HiddenFor(model => model.OrganisationId)
@Html.HiddenFor(model => model.UserId)
<div class="form-group has-feedback">
<div class="col-xs-12" style="padding:0px;">
@Html.TextAreaFor(model => model.Content, new { @class = "form-control", placeholder = Html.DisplayNameFor(model => model.Content) })
<span class="glyphicon glyphicon-option-horizontal form-control-feedback"></span>
</div>
</div>
<div class="form-group">
<div class="pull-right">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}OrderController
在这里,您可以看到用于删除注释表单并将注释发布到数据库中的控制器方法(“重定向”方法失败,与子操作的错误相同):
public ActionResult CreateComment(int orderId, int orgId)
{
var viewModel = new NewCommentViewModel()
{
OrderId = orderId,
OrganisationId = orgId,
UserId = User.Identity.GetUserId()
};
return PartialView(viewModel);
}
[HttpPost]
public ActionResult CreateComment(NewCommentViewModel viewModel)
{
orderManager.AddComment(viewModel);
return RedirectToAction("Details", new { id = viewModel.OrderId });
//return Redirect($"/Order/Details/{viewModel.OrderId}");
}发布于 2017-10-06 04:25:48
问题是,您的表单是从子操作生成的,并且检查html中的<form>元素,您将看到它生成了action="/order/details/14",而它需要是action="/order/CreateComment"。
您需要更改BeginForm()方法以生成正确的属性,以便将其发布到正确的方法。在CreateComment.cshtml视图中
@model Web.Models.NewCommentViewModel
@using (Html.BeginForm("CreateComment", "Order")) // change
{
@Html.AntiForgeryToken()
....https://stackoverflow.com/questions/46597829
复制相似问题