ActionLink to submit Model value



我需要我的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上的查询字符串。这不是最干净的方法,但它可以工作。

最新更新