我正在开发一个ASP.NET MVC项目,在提交表单时,模型会在数据库中创建一条新记录并将记录ID发送回表单(然后在某些表单中对其进行操作)其他JavaScript代码)。
我使用Telerik Kendo窗口控件,因此想法是用户点击Kendo弹出窗口中的提交按钮,并设置动态链。收到该值后,将关闭Kendo弹出窗口。
我一直在关注此帖子中的示例:PartialView with a form in a kendo window
就提交表单而言,此行为正常。此代码不从控制器接收任何值。在视图中:
<input type="button" value="Create" class="btn btn-default" onclick="formSubmit()"/>
后来......
<script>
function formSubmit() {
if (!inIframe()) {
// We are a parent window
$('form').submit();
}
else {
// We are a pop-up window
$('form').submit();
parent.$('#window').data('kendoWindow').close();
}
}
</script>
@(Html.Kendo().Window()
.Name("window")
.Title("Attached Report")
.Content("Loading...")
.Actions(actions => actions.Close())
.Iframe(true)
.Height(700)
.Width(1000)
.Modal(true)
.AutoFocus(true)
.Visible(false)
)
在控制器中:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(VMMyViewModel viewModel)
{
// Code omitted...basically, we save to the database
db.SaveChanges();
if (viewModel.IsInPopupWindow)
{
return null; // We return null to help us exit out of the popup window.
}
else
{
return RedirectToAction("Index"); // Since we're in the main window, go back to the index after submitting.
}
}
我想获取刚刚保存到数据库中的记录的记录ID,并以某种方式将其反馈给jQuery调用代码。我能够在控制器中发回记录ID的实际值,但它将作为具有记录ID的网页返回...
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(VMMyViewModel viewModel)
{
// Code omitted...basically, we save stuff
db.SaveChanges();
if (viewModel.IsInPopupWindow)
{
return Content(reportHeader.Id.ToString());
}
else
{
return RedirectToAction("Index"); // Since we're in the main window, go back to the index after submitting.
}
}
在jQuery方面,似乎我不应该使用$(&#39; form&#39;)。submit()因为没有通过成功获取数据的方式/错误机制。我已经尝试了其他几种方法(viewbags,jQuery触发器,jQuery POST,Kendo窗口控件上的关闭机制),但到目前为止我还没能将所有部分放在一起。
我怀疑我是以完全错误的方式解决这个问题。任何建议将不胜感激!
答案 0 :(得分:1)
在你的控制器中返回Json而不是Content,以便:
if (viewModel.IsInPopupWindow)
{
return Json(reportHeader.Id.ToString());
}
然后在你的js中,使用$ .post这样
function formSubmit() {
if (!inIframe()) {
// We are a parent window
// $('form').submit();
$.post($('form').attr("action"), $("form").serialize(), function(id){
// you got the id
// rest omitted ...
})
基本上你使用jquery发布表单,这样你就可以得到post的结果。但是,当你没有返回id时,你必须要做到这一点(在你当前的代码中有一个可能的重定向,哪些不起作用) - 也许返回一些表明存在问题的东西