我正在使用Ajax。以部分视图开始表单,以替换已定义目标的内容。
像这样,
局部视图:
@model string
<fieldset style="width:916px">
<legend class="SearchFiledSet">AMN</legend>
<table>
<tr valign="top">
<td>Notes: </td>
<td>@Html.TextArea("Notes", @Model, 5, 30, new { disabled = "disabled", style = "background: #FFF; border: 1px solid #000;" })</td>
@using (Ajax.BeginForm("AMN", new AjaxOptions { UpdateTargetId = "AMN",
Url = Url.Action("AMN"),
OnBegin = "OnBegin",
OnFailure = "OnFailure",
OnSuccess = "OnSuccess",
OnComplete = "OnComplete"}))
{
<td style="padding-left: 30px">P N:   @Html.TextBox("PN", "", new { size = "15" })
@if(string.IsNullOrEmpty(@Model))
{
<br />
<font color="red">No matching pn was found in the system.</font>
}
</td>
<td style="padding-left: 60px">
<button type = "submit">Search</button>
</td>
}
</tr>
</table>
</fieldset>
控制器:
public PartialViewResult AMN(string PN = null)
{
IPS p=null;
string remarks= " ";
if (PN != null)
{
p = _pS.GetPPN.Trim());
remarks = p != null ? p.Remarks : remarks;
}
return PartialView(((object)remarks));
}
主视图:
<div id="AMN" style="margin-left: 180px">
@Html.Action("AMN")
</div>
Ajax调用在IE中当然可以正常工作,但在Firefox中,它会在第一次提交时到达控制器上的断点并正确发布,但在每次连续提交后都不会发生任何事情。甚至连断点都不会被击中。几年前,我看到过其他一些人抱怨同样的问题的帖子,但没有一个得到解决。有没有人经历过这个问题,找到了解决方案,或者对这个问题有任何建议?
主页上还有另一个Html.BeginForm,我将部分视图链接到它,但我的部分视图在该表单之外,我还尝试删除另一个表单,只留下ajax表单,但没有成功。
我使用的是jquery-1.7.2
我想我现在基于对该主题的一般研究而不是将其引导到Ajax.BeginForm方法来理解正在发生的事情。我想基本上模仿面板的概念,并且能够插入完整的形式,并在ajax调用中用更新的数据替换面板(部分视图)。我对ajax或javascript没有那么丰富的经验,但当我重写html时,dom上的对象似乎也被替换了,所以所有的焦点都丢失了,因此它在一篇文章中有效,但不是两次。
这很令人困惑,主要是因为它的工作方式和我最初认为的一样,在IE浏览器上,但在Firefox上却没有。因此,为了使其跨浏览器兼容,我只使用JSON发回要更改的数据,然后向OnSuccess调用注册了一个函数,它只会更改所需的html,而不是重建部分。我想主要使用Asp.net MVC框架库来处理Ajax,以保持代码的简洁性,但我想这不太可能发生,除非我从部分中抽象出表单内容。
以下是为遇到此问题的其他人所做的更改:
控制器:
[HttpGet]
public PartialViewResult AMN()
{
string remarks = " ";
return PartialView(((object)remarks));
}
[HttpPost]
public JsonResult AMN(string PN = null)
{
IPS p=null;
string remarks= " ";
if (PN != null)
{
p = _pS.GetP(PN.Trim());
remarks = p != null ? p.Remarks : null;
}
return Json(remarks);
}
PartialView:
@model string
<fieldset style="width:916px">
<legend class="SearchFiledSet">AMN</legend>
<table>
<tr valign="top">
<td>Notes: </td>
<td>@Html.TextArea("Notes", @Model, 5, 30, new { disabled = "disabled", style = "background: #FFF; border: 1px solid #000;" })</td>
@using (Ajax.BeginForm("AMN", "PS", null, new AjaxOptions {OnSuccess = "processData" }, new { id = "AMNForm" }))
{
<td style="padding-left: 30px">PN:   @Html.TextBox("PN", "", new { size = "15" })
@if(string.IsNullOrEmpty(@Model))
{
<br />
<font color="red">No matching pn was found in the system.</font>
}
</td>
<td style="padding-left: 60px">
<button type = "submit">Search</button>
</td>
}
</tr>
</table>
</fieldset>
<s.. type="text/java..">
function processData(data) {
$("#Notes").val(data);
if (!data[0])
alert("data is null")
else
alert("data is not null")
}
</..>