我需要我的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>
}
My Controller action:
public PartialViewResult Bottom3(string name)
{
var model = db.XLBDataPoints.OrderBy(x => x.DataPointID).Take(3).ToList();
return PartialView("Partial1", model);
}
但是传递给动作的name参数总是空的。怎么解呢?
在你的代码中…你有两种不同的方式发送到服务器:链接和表单按钮。
问题是,ActionLink没有办法从客户端输入获取值…
如果你按下搜索按钮,你会看到一个值。
现在,你可以使用一些jQuery来修改标准的ActionLink(不是Ajax.ActionLink):https://stackoverflow.com/a/1148468/7720
还是……你可以转换你的表单,以做一个Ajax的帖子,而不是一个正常的:https://stackoverflow.com/a/9051612/7720
我为我的一个模型这样做了。我只支持HttpPost方法。因此将HttpMethod="POST"添加到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);
}
在razor视图
@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上的查询字符串。这不是最干净的方法,但它可以工作。