2

ここで大きな問題!タイトルがちょっと曖昧なのは知っていますが、一日中この問題が発生していて、解決方法がわかりません。面倒な方法ではなく、より具体的にしようと思います。簡単に言うと、検索用のメソッド(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関数に入るようですが、関数を完全には実行しません!そして、私は興味のあるモデル内で問題を抱えていました。私が自分自身を説明したかどうかはわかりませんが、警告は次のとおりです。他のことをする前に、モデルの一貫性に注意してください。私を助けてくれた人に感謝します、私が気付く前に私はそれを完全に間違っています!

4

2 に答える 2

1

複数の送信ボタンを処理する方法は次のとおりです

以下は、2つの送信ボタンがあるフォームです。これらの送信ボタンは両方とも同じ名前、つまり「submitButton」であることに注意してください</ p>

@Html.BeginForm("MyAction", "MyController"); %>
<input type="submit" name="submitButton" value="Button1" />
<input type="submit" name="submitButton" value="Button2" />
}

ここでコントローラーに移ると、アクションは文字列stringButtonと呼ばれる入力パラメーターを受け取り、残りはかなり自明です。

public ActionResult MyAction(string submitButton) {
        switch(submitButton) {
            case "Button1":
               // do something here
            case "Button2":
               // do some other thing here
            default:
                // add some other behaviour here
        }
...
}

これがお役に立てば幸いです。

アップデート :

あなたのコメントから、

こんにちは、私はこの回避策を知っています。私の問題は、2番目の送信がコントローラーを通過する必要がないことです。ビューでjavascript関数を呼び出す必要があります。正しい方法でコントローラーへの最初の投稿ですが、その後、javascript関数も実行します。

わかりました。2つの送信ボタンを使用する代わりに、1つの送信ボタンともう1つの送信ボタンを通常のボタンとして使用できます。例:-

@Html.BeginForm("MyAction", "MyController"); %>
<input type="submit" name="submitButton" value="Button1" />
<input type="button" id="otherButton" value="Button2" />
}

次に、いくつかの単純なjqueryを使用して、javascript関数を呼び出すことができますpostData()

<script type="text/javascript">
    $("#otherButton").bind("click", function () {
        console.log("do your stuff here");
        postData();

    });
</script>
于 2012-10-30T05:24:16.453 に答える
0

2番目の送信をから<input type="submit"に変更してみてください<input type="button"

于 2012-10-29T17:09:04.010 に答える