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
}
答案 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?