好几天我都找不到问题本身,这真让我疯狂。
我有asp.net(mvc4)web应用程序,其中有几个索引页面(显示列表),当点击列表中的任何项目时,它返回编辑视图页面。 在编辑页面(在视图本身中) - 有一个提交按钮,它应该更新数据库并重定向到索引页面。
(首先,"提交"通过部分视图加载了所有html编辑代码,但我更改了它以便我可以重定向到索引页面 - 因为"不允许子操作执行重定向操作")。
所以问题是控制器没有重定向到索引页面。
当我在控制器的post函数中放置一个断点时,我看到很少有线程运行代码,虽然没有要求线程,如果我站在其中一个进程调试箭头上,我可以看到消息&# 34;自上一步以来,流程或线程已发生变化"。
不知何故,我不知道如何,我在一个页面解决了问题(不知道怎么做,因为我不知道是什么导致了这个问题),但有时(随机)它又出现了,并且另一页我没有设法解决它。
以下是来自控制器和视图的一些代码:
控制器:
[HttpPost]
public ActionResult Edit([ModelBinder(typeof(OpportunityBinder))] OpportunityModel draft)
{
try
{
if (Request.Params["cancel"] != null)
{
return RedirectToAction("index", Utils.CrmDB.GetOpportunities());
}
if (draft.IsValid())
{
if (Utils.CrmDB.UpdateOpportunity(draft))
return RedirectToAction("Index", Utils.CrmDB.GetOpportunities());
}
return View(draft);
}
catch
{
return View();
}
}
查看:
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
/* Some divs */
<p>
<input type="submit" value="Update" />
</p>
</fieldset>
<fieldset>
/* Some partial views*/
/* loaded using @Html.Action() */
</fieldset>
}
@section Scripts
{
@Scripts.Render("~/bundles/jqueryval")
@Scripts.Render("~/bundles/modernizr")
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryui")
}
部分查看代码:
@model Genius_crm.Models.ActivityListModel
<p>
<button id="dlgAddActivity">
New
</button>
</p>
<div>
<table>
/* some tr and td */
</table>
</div>
<script type="text/javascript">
$(document).ready(function () {
$('#dlgAddActivity').each(function () {
var $link = $(this);
var pathname = window.location.pathname;
var parts = pathname.split('/')
var sub = parts[3]
var $dialog = $('<div id="addDialog"></div>')
.load('@Url.Action("AddActivityToOppPartial", "Opportunity")?CustId=@ViewBag.CustId&OppId=@ViewBag.OppId')
.dialog({
autoOpen: false,
title: $link.attr('title'),
width: 758,
height: 265,
resizable: false,
//close: function (event, ui) { window.location.reload();}
});
$link.click(function () {
$dialog.dialog('open');
return false;
});
});
});
所以 - 我希望我的问题清楚了。 我已经通过一些关于这个主题的帖子,但没有一个人帮助过我。 问题也出现在chrome和IE中。
编辑#1 - 在评论部分视图时,问题会在所有页面中消失!
编辑#2 - 似乎使用其他控制器操作在部分中加载按钮存在问题。
编辑#3 - 我添加了使用@ Html.Action()加载的部分视图代码,其中包含一个jquery-ui对话框的脚本。
答案 0 :(得分:1)
哦,上帝!这是一个艰难的一周,但至少我吸取了教训。
问题由两部分组成:
(1)EF和DataContext管理(我重新标记问题) 我使用了DataContext的单个静态实例(单例),结果证明它是无效且有问题的。
所以我正在寻找一些信息,发现有更好的DataContext管理实现(你可以阅读here),现在 - 一切似乎都正确!
(2)jQuery验证表单提交中的所有部分。我必须找到一种方法来处理它。
一部分没有另一部分的解决方案 - 没有产生好的结果。
答案 1 :(得分:0)
$link.click(function () {
$dialog.dialog('open');
return false;
});
应该像
$link.click(***return*** function () {
$dialog.dialog('open');
return false;
});