3

これは私がこれまで遭遇したことのない問題です。

私はMVC4プロジェクトに取り組んでいます。ボタンに使用できるHtmlヘルパーがないため、aspボタンコントロールを使用しています(re: @Html.Button はありません! )。私のボタンコードは次のとおりです。

<td><asp:Button ID="ButtonUndo" runat="server" Text="Undo" 
                        OnClick="ButtonUndo_Click" AutoPostBack="true"/></td>

[デザイナー] タブに移動し、イベント ハンドラーを生成するこのボタンをクリックしました。

protected void ButtonUndo_Click(object sender, EventArgs e)
{
    RRSPSqlEntities db = new RRSPSqlEntities();
    int id = (int)ViewData["ClientId"];

    var updateAddress = (from a in db.Address
                             where a.PersonId == id
                             select a).SingleOrDefault();

    updateAddress.Deleted = false;
    db.SaveChanges();
}

このコードは、スクリプト タグでラップされた同じ .aspx ページに追加されたことを付け加えておきます。また、このセクションには Page_Load メソッドがあります。イベント ハンドラが Page_Load 内にありません。

ブレークポイントを設定してコードをステップ実行したときに問題が見つかりました。ボタンをクリックすると、イベント ハンドラにまったくヒットしないことがわかります。特に ASP がデザイン モードでボタンをクリックしてイベントを作成したため、これがなぜなのかわかりません。

4

2 に答える 2

5

ボタンをクリックすると、イベント ハンドラにまったくヒットしないことがわかります。

驚くべきことはこれだけではありません。ASP.NET MVC は、まったく異なるイベント モデルを使用します (つまり、Web フォームのようなものはありません)。ただし、やろうとしていることは非常に簡単です。コントローラーで新しいメソッドを作成し、それを呼び出しましょうUndo:

public ActionResult Undo(int id)
{
    RRSPSqlEntities db = new RRSPSqlEntities();

    var updateAddress = (from a in db.Address
                             where a.PersonId == id
                             select a).SingleOrDefault();

    updateAddress.Deleted = false;
    db.SaveChanges();

    return View("{insert the original action name here}");
}

input次に、マークアップで、次のようにマークアップします。

<form method="POST" action="/ControllerName/Undo">
    @Html.HiddenFor(Model.Id)
    <input type="submit" value="Undo" />
</form>

あなたがいる の にはプロパティが含まれています。私はそれを と呼んModelでいます。ViewIdidUndo

于 2013-05-16T16:52:19.653 に答える
0

私は通常、ajax 呼び出しを行うことを好みます。あなたが試すことができます:

    <button type="button" class="button" onclick="ButtonUndo();" />

形式:

    <script>
        function ButtonUndo() {
            $.ajax({
                    type: 'POST',
                    url: '/controller/action',
                    data: 'PersonID=' + ID,
                    dataType: 'json',
                    cache: false,
                    success: function (result) {
                        //do stuff here
                    },
                    error: function () {
                        //do error stuff here
                    }
            });
        }
    </script>

コントローラ:

    [HttpPost]
    public ActionResult Action(int PersonID)
    {
        //Do your stuff here

        return new JsonResult { result = "something" };
    }

(タイプミスや構文エラーについては申し訳ありません...プロジェクトで使用している既存のコードから引っ張ってきました。)

于 2013-05-16T18:03:56.597 に答える