ActionLink提交Model值

时间:2014-06-22 16:52:36

标签: ajax asp.net-mvc asp.net-mvc-5 html-helper

我希望我的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。我该如何解决这个问题?

2 个答案:

答案 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上使用查询字符串发布了一个模型对象。不是最干净的方法,但它确实有效。