我希望我的Ajax.ActionLink将viewModel属性传递给action。
这是我的ViewModel
public class ViewModel
{
public string Searchtext { get; set; }
}
我的.cshtml
@Ajax.ActionLink("Bottom3", "Bottom3",new { name = Model.Searchtext}, new AjaxOptions
{
HttpMethod = "POST",
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "pointsDiv"
})
using(Html.BeginForm("Bottom3", "Home", FormMethod.Get))
{
@Html.TextBoxFor(x => x.Searchtext)
<button type="submit">Search</button>
}
<div id="pointsDiv"></div>
}
我的控制器操作:
public PartialViewResult Bottom3(string name)
{
var model = db.XLBDataPoints.OrderBy(x => x.DataPointID).Take(3).ToList();
return PartialView("Partial1", model);
}
但传递给action的name参数始终为null。我该如何解决这个问题?
答案 0 :(得分:2)
在您的代码中......您有两种不同的方式发布到服务器:链接和表单按钮。
问题是ActionLink无法从客户端的输入中获取值...只是原始值。
如果按“搜索”按钮,您将看到已发布的值。
现在,您可以使用一些jQuery来修改标准ActionLink(而不是Ajax.ActionLink): https://stackoverflow.com/a/1148468/7720
或者......你可以转换你的表格以便做一个Ajax帖子而不是正常的帖子: https://stackoverflow.com/a/9051612/7720
答案 1 :(得分:0)
我为我的模型这样做了。我只支持HttpPost方法。所以添加HttpMethod =&#34; POST&#34;到您的Ajax.ActionLink
[HttpPost]
public ActionResult Accounts(ParametricAccountsModel model)
{
if (model.Accounts == null)
{
GetAccountsForModel(model);
}
if (model.AccountIds == null)
{
model.AccountIds = new List<int>();
}
return View(model);
}
在剃须刀视图
上@Ajax.ActionLink(
"Add Account to Order", "Accounts", "Parametric", null,
new AjaxOptions() { InsertionMode = InsertionMode.Replace, UpdateTargetId = "...", HttpMethod = "POST" },
new { @id = "AddParametricAccountLink" })
该模型包含所选帐户ID的列表。所以在javascript中,我动态地修改了动作链接的href。
function UpdateParametricAccountAction() {
var originalLink = '/TradeNCashMgmt/Parametric/Accounts';
var append = '';
var numberOfRows = $('#ParametricAccounts').find('.parametric-account- row').size();
for (var i = 0; i < numberOfRows; i++) {
if (i != 0) {
append += '&';
}
else {
append = '?';
}
var idValue = $('#NotionalTransactionsAccountId_' + i).val();
append += 'AccountIds%5B' + i + '%5D=' + idValue;
}
$('#AddParametricAccountLink').attr('href', originalLink + append);
}
由于模型绑定器在查询字符串和表单提交中查找参数名称,因此它将使用href获取值。所以我在Ajax.ActionLink上使用查询字符串发布了一个模型对象。不是最干净的方法,但它确实有效。