0

您好,任何人都可以帮助我使用 Ajax Actionlink 从表单中传递文本框的值。一整天都在弄清楚我的价值仍然是空的。

我使用没有任何按钮的纯 Ajax 操作链接。

这是删除 ajax 操作链接的示例,效果很好! http://www.joe-stevens.com/2010/02/16/creating-a-delete-link-with-mvc-using-post-to-avoid-security-issues/

但是在表单集合中使用它的值总是空的。任何帮助表示感谢!

这是我的代码:

客户视图

<%= 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

尝试这个

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

函数 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 回答
0

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

要么把你的 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

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

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

如果您注意到您共享的链接,它只需要一个参数作为 id 的 Action Method 参数。

从您给出的代码看来,您似乎想将这两个 Fname 和 Lname 中的数据(尽管这些名称不符合标准)发布到服务器并保存它,您可能想看看下面的链接。

Stckoverflow Answer 如何在 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 回答