我有一个部分视图,其中包含用于获取插入/更新数据库记录的数据的表单。显示具有此部分视图的页面没有问题。填写数据并发布表单工作正常(记录正确保存到数据库中)。问题是虽然我返回一个局部视图(return PartialView();
),但系统会用整个页面替换目标div(而不仅仅是部分视图)!!
从以上症状中,您可以理解:
请注意,部分视图以Layout = ""
开头(因此它不会引用任何布局)。我也使用Layout = null
进行了测试,结果相同。
其他细节:
部分视图:
@using FLATS;
@model TMSCounterpartyModel
@{
Layout = "";
TMSCounterpartyModel myModel = (TMSCounterpartyModel)Model;
Html.EnableClientValidation(true);
Html.EnableUnobtrusiveJavaScript(true);
AjaxOptions ajaxOpt = new AjaxOptions {
HttpMethod = "POST",
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "frmEditCounterparty"
};
}
@using(Ajax.BeginForm("HandlePost", "EditTMSCounterparty", null, ajaxOpt, new { @id="editCptyForm" }))
{
@Html.AntiForgeryToken()
<div class="row">
<fieldset>
@Html.HiddenFor(model => model.Id)
...
<div class="row margin-top-20">
<div class="col-xs-10 col-xs-offset-1 col-sm-8 col-sm-offset-3 col-md-8 col-md-offset-2">
<input id="btnSubmit" type="submit" value="Save" class="form-control" />
</div>
</div>
</fieldset>
</div>
}
控制器:
public class EditTMSCounterpartyController : System.Web.Mvc.Controller
{
[HttpPost]
[ValidateAntiForgeryToken()]
public PartialViewResult HandlePost(TMSCounterpartyModel model)
{
string viewPath = Library.PartialViewFullPath("EditCounterparty.cshtml");
if (ModelState.IsValid == false)
{
return PartialView(viewPath, model);
}
if (model.Save() == true)
{
TMSCounterpartyModel newModel = new TMSCounterpartyModel();
newModel.LoadOrDefault(model.Id);
return PartialView(viewPath, newModel);
}
else
{
return PartialView(viewPath, model);
}
}
}
感谢任何帮助。
提前谢谢。
答案 0 :(得分:0)
最后,问题似乎与Map Routes有关。我添加了RouteTable.Routes.MapRoute("EditCpty", "EditTMSCounterparty/{action}", new { controller = "EditTMSCounterparty", action= "OpenForm" });
,问题解决了。
虽然,我仍然不明白为什么MVC找到控制器,但它正在搞乱返回的PartialViewResult。反正。
谢谢大家的努力。