这里有大问题!我知道标题有点模糊,但是我整天都遇到这个问题,无法弄清楚如何解决它。我会尽量以不那么混乱的方式更具体。长话短说,我有一个控制器(LeadController)和一个搜索方法(Search):
public ActionResult Search(string prov = null, string city = null)
{
//if no field is compiled, return an empty view
if (String.IsNullOrWhiteSpace(prov) && String.IsNullOrWhiteSpace(city))
return View();
var leads = from l in db.Leads
select l;
if (!String.IsNullOrWhiteSpace(prov))
{
leads = leads.Where(l => l.Prov == prov).OrderBy(l => l.RagioneSoc);
}
if (!String.IsNullOrWhiteSpace(city))
{
leads = leads.Where(l => l.Comune == city).OrderBy(l => l.RagioneSoc);
}
return View(leads);
}
然后我有两个提交表单的搜索视图(显示要填写的搜索字段和发布操作后的结果):第一个执行搜索
@using (Html.BeginForm()){
Sigla Provincia: @Html.TextBox("prov", null, new { @style = "width: 50px;"})
Città: @Html.TextBox("city", null, new { @style = "width: 150px;" })
<input type="submit" value="Ricerca" data-icon="search" data-role="button" data-mini="true" data-inline="true" />}
第二个从搜索操作的潜在客户结果生成文档
<input type="submit" title="create doc" value="Create document" onclick="javascript:postData()" id="doc" />
最后一次提交应该调用一个 javascript 函数来对模型进行编码:
<script type="text/javascript">
function postData() {
var urlact = '@Url.Action("createDoc")';
var model = '@Html.Raw(Json.Encode(Model))';
$.ajax({
...
...
});
}
</script>
现在,问题是:当我调用第一个提交时,应该执行研究的那个,它执行研究但它也继续进行,调用postData() javascript函数(即使我从未“告诉”他这样做那)。并且该站点停止在var model = @Html.Raw(Json.Encode(Model))'; ,带有 InvalidOperationException。
如果有人理解我的问题,有没有办法避免这种行为并强制第一次提交仅向控制器传递参数以执行搜索操作?
希望有人可以帮助我,提前感谢您的考虑!
解决了
好在问题消失了。显然,我不太了解 View & Javascript 的行为。长话短说,似乎视图,加载本身,进入 js 函数以缓存模型编码,但它并没有完全运行该函数!我在感兴趣的模型中遇到了问题。我不知道我是否解释过自己,但警告是:在做任何其他事情之前要小心你的模型一致性。感谢任何帮助过我的人,在我意识到我完全错了之前!