首页 > 解决方案 > 如何将参数与模型一起传递?

问题描述

这是我的View(模型ActivityViewModel):

@model GPMS.Models.ActivityViewModel
<div class="tab-pane" id="managepayments" role="tabpanel">
    @{ Html.RenderPartial("_Payments", Model.Payments); }
</div>

哪个呈现部分(模型IEnumerable<GPMS.Models.PaymentViewModel>):

@model IEnumerable<GPMS.Models.PaymentViewModel>
@using (Ajax.BeginForm("SavePayments", "Activities", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "DynamicContainer", InsertionMode = InsertionMode.Replace, OnBegin = "AjaxBeginFormOnBegin", OnComplete = "AjaxBeginFormOnComplete", OnSuccess = "AjaxBeginFormOnSuccess", OnFailure = "AjaxBeginFormOnFailure" }))
{
    @Html.AntiForgeryToken()
    <!-- My Form -->
}   

向我的控制器发送Ajax请求Action

public ActionResult SavePayments(IEnumerable<PaymentViewModel> payments)
{
    if (ModelState.IsValid) {
        // code; here I need ActivityViewModel.ID
    }
}

问题是:我怎样才能将SavePayments我存储的活动 ID传递给它ActivityViewModel.ID?我可以做路由吗?

我不想将整个传递ActivityViewModelSavePayments,否则我需要注意ModelState.IsValid检查所需的字段。

标签: asp.net-mvcparametersmodelrouting

解决方案


一种选择是使用 的重载Html.Partial来传递IDusing additionalViewData,然后在局部视图中检索它并将其作为路由值添加到表单中。

在主视图中

@{ Html.RenderPartial("_Payments", Model.Payments, new ViewDataDictionary { { "ID", Model.ID} }); }

而在部分

@using (Ajax.BeginForm("SavePayments", "Activities", new { id = ViewData["ID"] }, new AjaxOptions { ....

然后在 POST 方法中为 ID 添加一个参数

public ActionResult SavePayments(int id, IEnumerable<PaymentViewModel> payments)

推荐阅读