0

こんにちは、Ajax Actionlink を使用してフォームからテキスト ボックスの値を渡す方法について教えてください。まだnullの値を取得していることを理解するのに丸一日かかりました。

Anyボタンなしで純粋なAjaxアクションリンクを使用しています。

これは ajax アクション リンクの削除のサンプルです。 http://www.joe-stevens.com/2010/02/16/creating-a-delete-link-with-mvc-using-post-to-avoid-security-issues/

ただし、フォーム コレクションで使用すると、値は常に null になります。どんな助けでも感謝しますありがとう!

ここに私のコードがあります:

カスタマービュー

<%= Html.TextBoxFor(model => model.Fname, new {  id = "Fname" })%>
<%= Html.TextBoxFor(model => model.Lname, new {    id = "Lname"})%>


 <%= Ajax.ActionLink("Create", "Create", 
                    new { id = 1}, 
                    new AjaxOptions { 
                            HttpMethod="POST",
                            OnFailure = "function() { alert('fail'); }",
                            OnSuccess = "function() { alert('success'); }" 
                        })%> 

}

カスタマーコントローラー

[AcceptVerbs(HttpVerbs.Post)] public ActionResult Create(FormCollection formCollection) {

        clsCustomer objcustomer = new clsCustomer();
        clsSession objSession = new clsSession();


        objcustomer.Fname = formCollection["Fname"];  --> NULL 
        objcustomer.Lname = formCollection["Lname"]; --> NULL

        }
4

4 に答える 4

0

Ajax アクション リンクを使用している間、唯一のパラメーターとして id を送信しています。これはフォーム投稿ではないため、アクセスしようとすると FormsCollection は空になります。

objcustomer.Fname = formCollection["Fname"];
objcustomer.Lname = formCollection["Lname"];

共有したリンクに気付いた場合は、id であるアクション メソッド パラメーターとして引数を 1 つだけ期待しています。

あなたが与えたコードから、これら2つのFnameとLname(これらの名前は標準に準拠していませんが)からデータをサーバーに投稿して保存したいようです。以下のリンクをご覧ください。

Stckoverflow 回答 Asp.net MVC 4 でシンプルな Ajax Beginform を使用するには?

作業例http://www.c-sharpcorner.com/UploadFile/3d39b4/working-with-html-beginform-and-ajax-beginform-in-mvc-3/

于 2016-08-10T09:58:16.643 に答える
0

コントロールをフォーム内に配置しましたか? (あなたが述べたように)削除は(ajaxリンクに追加している)IDでのみ機能しますが、作成するにはオブジェクトを作成するためのデータが必要です。

次のようなフォーム内にHTMLを配置します

    @using (Ajax.BeginForm("Create", new AjaxOptions { HttpMethod = "POST", OnSuccess = "alert('success')", OnFailure = "alert('fail')" }))
    {
        @*- your input fields - *@
        <input type="submit" value="Create" />   
    }

または、次のようにスクリプトで実行します

    $('#yourlink').click(function(){
        $.ajax({
        type: "POST",
        url: '@Url.Action("Create")',
        data: $('#yourFormId').serialize()
    })
    .done(function() { alert("success"); })
    .fail(function() { alert("error"); });

構文エラーを確認してください。このコードはテストされていません。

于 2013-07-26T10:16:22.347 に答える
0

ASP.NET MVC アプリケーションでは FormCollection を使用しないでください。ビュー モデルを定義し、コントローラ アクションがこのビュー モデルを引数として受け取るようにする必要があります。プロパティは、既定のモデル バインダーによって自動的に入力されます。それがMVCの美しさです。

public class YourViewModel
{
    public string Property1 { get; set; }
    public int Property2 { get; set; }
}



public Customer(YourViewModel model)
{

}

ただし、Formcollection は投稿される値を保持します。あなたの場合

new { id = 1},

Id のみが投稿されます。コントローラーに投稿する前に、FName と LName の値を引き出す必要があります。

于 2013-07-26T09:34:02.480 に答える
0

これを試して

@Html.TextBoxFor(model => model.Name, new { @id = "txtname", onclick='OnEditClick(" + item.ActionID + ")' })

function OnEditClick(id) { var id= id;

        $.ajax({

            url: 'EditAction',
            type: 'POST',
            data: JSON.stringify({ id:id  }),
            dataType: 'json',
            contentType: 'application/json',
            success: function (result) {
               $('#lblMessageSuccess').html('Success');
            },
            error: function () {
                $('#lblMessageSuccess').html('Fail').fadeIn();
            }
        });
        return false;
    };
于 2013-07-26T09:54:47.427 に答える