MVC ASP.NET AJAX ACTION LINK创建

时间:2013-07-26 08:17:53

标签: asp.net ajax asp.net-mvc asp.net-mvc-2 asp.net-ajax

Hello可以帮助我使用Ajax Actionlink从表单传递文本框的值。整整一天都在弄清楚我的价值是否为零。

我使用纯Ajax Action链接而没有任何按钮。

这里是删除ajax动作链接的样本完美! http://www.joe-stevens.com/2010/02/16/creating-a-delete-link-with-mvc-using-post-to-avoid-security-issues/

但是在表单集合中使用它时,值始终为null。任何帮助感谢,谢谢!

这是我的代码:

CustomerVIEW

<%= 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'); }" 
                        })%> 

}

CustomerController

的[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 个答案:

答案 0 :(得分: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的值

答案 1 :(得分:0)

试试这个

@ Html.TextBoxFor(model =&gt; 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;
    };

答案 2 :(得分:0)

您是否将控件放在表单中?删除(如您所述)将只使用id(您在ajax链接中添加),但是创建需要创建对象的数据。

将你的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"); });

检查语法错误,此代码未经过测试。

答案 3 :(得分:0)

使用Ajax Action链接时,您发送id作为唯一参数。由于这不是表单,因此当您尝试访问

时,FormsCollection将为空
objcustomer.Fname = formCollection["Fname"];
objcustomer.Lname = formCollection["Lname"];

如果你注意到你共享的链接,它只希望一个参数作为一个id的Action Method参数。

从您提供的代码中,您似乎想要发布来自这两个Fname&amp;的数据。 Lname(虽然这些名称不符合标准)对服务器&amp;保存它,你可能想看看下面的链接。

Stckoverflow回答How to use Simple Ajax Beginform in Asp.net MVC 4?

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