10

我正在开发 Nopcommerce,需要生成发票(定制的不是他们已经提供的,因为它不能解决我们的目的)。我们需要使用控制器的方法在新选项卡(使用另一个 cshtml 文件)中生成发票,我也在视图上传递模型数据。

<tr>
        <td class="adminTitle">
            @Html.NopLabelFor(model => model.ProbableDeliveryDate):
        </td>
        <td class="adminData">
            @Html.EditorFor(model=>model.ProbableDeliveryDate)
        </td>
        </tr>
        <tr>
            <td>
            @if(Model.CanGenrateInvoice)
            {
                 <input type="submit" name="generateinvoice" value="@T("Admin.Orders.Fields.generateinvoice")" id="generateinvoice" class="adminButton"  />
            }
            </td>
        </tr>

我必须发布数据以获取 probableDeliveryDate 的值到控制器方法,然后想在新选项卡中打开视图。

我怎样才能做到这一点?

4

1 回答 1

14

如果您通过 Html.ActionLink 从第一页进入操作,您可以这样做:

Html.ActionLink("Open Invoice", "ActionName","ControllerName", new { id = Model.InvoiceID }, new { target = "_blank" });

指定 target = "_blank" 将在新选项卡中打开

更新

由于您将模型发布到控制器(我希望 RedirectToAction 可以帮助打开一个新窗口/选项卡,但事实并非如此)

我的感觉很刺痛你的流量......这只是我,但我会做一些不同的事情......比如

  1. 将模型发布到控制器
  2. 保存生成发票的数据
  3. 将 InvoiceID 返回给操作
  4. 将 InvoiceID 添加到模型
  5. 将模型发送回视图
  6. 通知用户
  7. 发票已生成并显示一个链接 - 如上所述 - 允许用户打开发票或
  8. 这提供了完美的干净解决方案来显示模型错误(如果有)

您的视图可能有一段剃刀代码可以做到这一点:

@{
    if(Model.InvoiceID != null && Model.InvoiceID !=0) {
        @Html.ActionLink("Open Invoice", "ActionName","ControllerName", new { id = Model.InvoiceID }, new { target = "_blank" });
    } 
}
于 2012-05-12T12:05:27.263 回答