如果这成为一个很长的问题,请提前道歉......
背景资讯
我有一个使用Telerik组件的MVC 3应用程序,这个特定的问题(我认为)特定于Window()组件。
从我的主视图(Index.cshtml)我执行ajax请求以返回部分视图,这是我用我的窗口内容填充的。这是执行请求的jquery:
var url = '@Url.Action("GetAddPart", "Jobs")';
var window = $("#Window").data("tWindow");
var data = $("#indexForm").serialize();
window.ajaxRequest(url, data);
window.center().open();
控制器操作是:
[HttpGet]
public ActionResult GetAddPart(MDTCompletedJobM model)
{
// show the AddPart window
//TryUpdateModel<MDTCompletedJobM>(model);
model.ActionTakenList = ActionTakenList;
model.ProblemTypes = ActualProblemList;
var addPartM = new MDTAddPartM() { CompletedJobM = model };
return PartialView(string.Concat(ViewDefaultUrl, "AddPart.cshtml"), addPartM);
}
这打开了我的窗户hunky dory。
在我的局部视图中,我有一个带有两个或三个字段的表单和一个“添加”,“取消”按钮。为了简洁起见,我只是展示我认为是部分视图的相关部分,但是我如果需要,可以生成整个视图:
<div id="resultDiv">
@using (Html.BeginForm("AddPart", "Jobs", FormMethod.Post, new { id = "addPartForm", name = "addPartForm" }))
{
** layout components removed from here **
<input type="button" value="Add" class="t-button" id="btnAdd"/>
<input type="button" value="Cancel" class="t-button" id="btnCancel"/>
<p />
<div id="progressdiv">
</div>
}
</div>
是局部视图中的“顶级”标记。
我的jquery处理取消按钮是:
$("#btnCancel").click(function () {
var window = $("#Window").data("tWindow");
window.close();
});
在我的主视图中,我有一个提交按钮,在完成后有效地将主视图“禁用”或显示错误。此提交按钮的操作将返回主视图:
Controller's action snippet:
if (ViewData["DoPayJobWarningStr"] == null)
return RedirectToAction("GetAutoDispatchJob", new { autoDispatchJob = model.JobReferenceNumber});
else
return View(string.Concat(ViewDefaultUrl, "Index.cshtml"), tmpModel);
我的实际问题
对于我正在使用的特定示例,我期望ViewData [“DoPayJobWarningStr”]不为null,返回View(...)将被执行。
如果我在不打开窗口的情况下执行此操作(对于提交按钮),我的视图将正确返回并更新页面以显示警告消息。但是,如果我先打开窗口然后执行提交按钮,页面上的View不会更新,但似乎放在了Window的html中。即,如果我点击提交按钮(没有任何反应),然后单击打开Telerik窗口的按钮,我会简要地看到提交动作返回的视图,在更新部分视图应包含的内容之前显示。我完全不了解退回的View放在那里的原因是什么或为何?
我尝试过的事情:
我没有使用“window.ajaxRequest(url,data)”,而是尝试了(结果相同):
$.ajax({
type: "GET",
cache: false,
url: url,
data: $("#indexForm").serialize(),
success: function (data) {
var window = $("#Window").data("tWindow");
window.content(data);
window.center().open();
$("#progress").html('')
},
error: function (e) {
alert(e.Message);
}
});
是否有可能确定我做错了什么?是ajax请求吗?只是假设因为删除它可以解决问题,但可能还有更多问题。
谢谢,当然如果您需要更多信息,请询问:)
由于
修改
根据3nigma的建议,这是我更新的内容(仍然没有运气)......
Telerik窗口定义:
@{Html.Telerik().Window()
.Name("Window")
.Title("Add Part")
.Draggable(true)
.Modal(true)
.Width(400)
.Visible(false)
.Height(270)
.ClientEvents(e => e.OnOpen("onWindowOpen"))
.Render();
}
jquery函数,它是按钮的OnClick事件:
function AddBtnClicked() {
$("#Window").data('tWindow').center().open();
}
onWindowOpen事件:
function onWindowOpen(e) {
//e.preventDefault();
var data = @Html.Raw(Json.Encode(Model));
var d2 = $.toJSON(data);
$.ajax({
type: 'GET',
url: '@Url.Action("GetAddPart", "Jobs")',
data: d2,
contentType: 'application/json',
success: function (data) {
var window = $("#Window").data("tWindow");
window.content(data);
$("#progress").html('');
},
error: function (xhtr, e, e2) {
alert(e +'\n' + xhtr.responseText);
}
});
};
答案 0 :(得分:0)
行。
问题与部分视图中的这一行有关:
<script src="@Url.Content("~/Scripts/ValidationJScript.js")" type="text/javascript"></script>
一旦我把它拿出来,一切正常。不知道为什么会导致这个问题 - 我不认为它曾经被加载过,但也许它导致了这个问题。
感谢3nigma的想法,尽管如此!