【问题标题】:Html.Action from a partial view局部视图中的 Html.Action
【发布时间】:2014-01-13 19:52:34
【问题描述】:

我在 asp.net Mvc 应用程序的局部视图中调用 Html.Action。调用了一个 void 方法,该方法应该接收进入局部视图的模型对象,但该方法接收到 null。

模型进入局部视图:

@model IEnumerable<RA.Web.Models.BookedResource>

Html.Action:

@Html.Action("SendEmailConfirmation", "BookedResource", Model.ToList())

bookedResources中接收null的void方法:

public void SendEmailConfirmation(List<BookedResource> bookedResources)
{
    var email = new Email();
    email.SendEMail(CurrentUser, "Subject",     CreateBodyForConfirmation(bookedResources)); 
}

有人知道为什么参数为空吗?

【问题讨论】:

  • 你能把BookedResource的代码贴出来吗?

标签: asp.net asp.net-mvc


【解决方案1】:

Html.Action 有一个重载,它需要路由值作为对象,但不是List&lt;Object&gt;。您可以创建一个ViewModel,而不是使用List&lt;BookedResource&gt;。见下文:

public class MyViewModel
{
     public List<BookedResource> BookedResources { get; set; }
}

然后在你的视图中使用 MyViewModel:

   @model MyViewModel 

   @Html.Action("SendEmailConfirmation", "BookedResource", Model)

最终使用MyViewModel作为参数类型:

public void SendEmailConfirmation(MyViewModel bookedResources)
{
    //
}

【讨论】:

    【解决方案2】:

    Html.Action() 采用路由值,而不是模型。

    使用 jquery ajax 回调您的控制器操作可能会更好。无论如何,我从未真正见过 Html.Action 以这种方式使用。它旨在返回html。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-18
      • 2015-09-06
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      • 1970-01-01
      • 2017-09-01
      相关资源
      最近更新 更多