【问题标题】:How can I pass a parameter together with the Model?如何将参数与模型一起传递?
【发布时间】:2018-07-17 08:47:04
【问题描述】:

这是我的View(型号ActivityViewModel):

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

渲染一个局部(模型IEnumerable&lt;GPMS.Models.PaymentViewModel&gt;):

@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
    }
}

问题是:如何将存储在ActivityViewModel.ID 中的活动ID 也传递给SavePayments?我可以使用路由吗?

我不想将整个ActivityViewModel 传递给SavePayments,否则我需要注意ModelState.IsValid 检查的必填字段。

【问题讨论】:

  • 您在 parent 和 partial 中定义了不同的 @model 类型,但您使用的是相同的 Model。怎么会?
  • 您的代码将引发异常。你需要展示真实的代码。
  • @StephenMuecke:错字!固定!
  • 那么为什么不在主视图中包含表单呢?
  • @StephenMuecke:因为我只想发回/管理付款,而不是整个活动。在主视图中,我可以有不同的形式。

标签: asp.net-mvc parameters model routing


【解决方案1】:

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

在主视图中

@{ 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    相关资源
    最近更新 更多