【问题标题】:Pass FormAction in model with MVC Futures使用 MVC 期货在模型中传递 FormAction
【发布时间】:2016-01-19 07:17:39
【问题描述】:

对于 3 个不同的控制器,我的观点或多或少完全相同。唯一的区别是他们在哪里张贴表格。所有这些控制器都派生自同一个基类,并且视图包含一个表单,该表单将发布到该基类中的一个操作。

我的视图目前如下所示:

@model Models.Forms.ContactPersonForm
@{
    Layout = null;
}
<div class="modal-header">
    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
    <h4 class="modal-title">Edit contact person</h4>
</div>
@using (Html.BeginForm<ProductsController>(x => x.EditContactPerson(null), FormMethod.Post))
{
    <div class="modal-body">
        @Html.EditorForModel()
    </div>
    <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">
            <span class="fa fa-times" area-hidden="true"></span> Close
        </button>
        <button type="submit" class="btn btn-primary">
            <span class="fa fa-floppy-o" area-hidden="true"></span> Save
        </button>
    </div>
}

上面的视图工作正常。但我想将它重用于另一个也继承相同基本控制器的控制器(并发布到EditContactPerson 操作)。因此,我想在模型中指定要发布到哪个控制器。我知道我可以这样使用string overload

@Html.BeginForm("EditContactPerson", "Products", FormMethod.Post)

@Html.BeginForm(Model.Action, Model.Controller, FormMethod.Post)

但我真的想改用Expression,就像这样:

@Html.BeginForm<ProductsController>(x => x.EditContactPerson(null), FormMethod.Post)

有没有一种方法可以使用模型来使用模型中的表达式来呈现表单?

类似于:

@Html.BeginForm<Model.ControllerType>(Model.ActionExpression, FormMethod.Post)

【问题讨论】:

  • 我会使用简单的 HTML
    标签而不需要任何 HTML 帮助扩展,你的问题就会得到解决:)
  • @dawidr,是的,你说得对。问题是我正在尝试对所有路由进行强类型化。
  • 能不能用DI模式,创建IController之类的Interface,顺便说一句……总猜
  • @Chef_Code,可能是的。这就是我尝试过的原因,但我没有让它工作,因为你需要 BeginForm
  • 是的,我要去探索它,我会回复你

标签: c# asp.net-mvc form-submit asp.net-mvc-futures


【解决方案1】:

这样的事情呢:

@model Models.Forms.ContactPersonForm
@{
    Layout = null;
}
<div class="modal-header">
    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
    <h4 class="modal-title">Edit contact person</h4>
</div>
@if (Model.XYZ == "...")
{
    using (Html.BeginForm<ProductsController>(x => x.FirstAction(null), FormMethod.Post))
    {
        Html.RenderPartial("FormContentPartialView");
    }
}
else
{
    using (Html.BeginForm<ProductsController>(x => x.SecondAction(null), FormMethod.Post))
    {
        Html.RenderPartial("FormContentPartialView");
    }
}

【讨论】:

    猜你喜欢
    • 2020-12-20
    • 2019-03-09
    • 2011-01-20
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    相关资源
    最近更新 更多