ここで大きな問題!タイトルがちょっと曖昧なのは知っていますが、一日中この問題が発生していて、解決方法がわかりません。面倒な方法ではなく、より具体的にしようと思います。簡単に言うと、検索用のメソッド(Search)を備えたコントローラー(LeadController)があります。
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);
}
次に、2つの送信フォームを含む検索ビュー(検索用に入力するフィールドと投稿アクション後の結果を表示)があります。最初のフォームで検索を実行します。
@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" />}
2つ目は、検索アクションのリード結果からドキュメントを生成します
<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関数に入るようですが、関数を完全には実行しません!そして、私は興味のあるモデル内で問題を抱えていました。私が自分自身を説明したかどうかはわかりませんが、警告は次のとおりです。他のことをする前に、モデルの一貫性に注意してください。私を助けてくれた人に感謝します、私が気付く前に私はそれを完全に間違っています!