Asp.net mvc 在ASP.NET MVC中使用EditCreate.ascx partial编辑和创建视图

Asp.net mvc 在ASP.NET MVC中使用EditCreate.ascx partial编辑和创建视图,asp.net-mvc,partial-views,Asp.net Mvc,Partial Views,如果您查看NerdDinner创建和编辑晚餐的示例,您会发现他们使用部分(ViewUserControl或ASCX)DinnerPerform将创建和编辑晚餐的功能放在一个文件中,因为这是必不可少的,他们使用RenderPartial(“DinnerPerform”) 这种方法对我来说似乎很好,但我遇到了一个问题,您必须向表单标记添加额外的路由值或html属性 这将自动拾取当前操作和控制器: <% using (Html.BeginForm()) { %> 但是,如果我使用另一

如果您查看NerdDinner创建和编辑晚餐的示例,您会发现他们使用部分(ViewUserControl或ASCX)DinnerPerform将创建和编辑晚餐的功能放在一个文件中,因为这是必不可少的,他们使用RenderPartial(“DinnerPerform”)

这种方法对我来说似乎很好,但我遇到了一个问题,您必须向表单标记添加额外的路由值或html属性

这将自动拾取当前操作和控制器:

<% using (Html.BeginForm()) { %>

但是,如果我使用另一个BeginForm()重载,允许传入enctype或任何其他属性,我必须这样做:

<% using ("Create", "Section", new { modal = true }, FormMethod.Post, new { enctype = "multipart/form-data" }))
<% using (Html.CurrentAction, Html.CurrentController, new { modal = true }, FormMethod.Post, new { enctype = "multipart/form-data" }))

添加以下HTML帮助程序怎么样:

    public static MvcHtmlString CurrentAction(this HtmlHelper htmlHelper)
    {
        return htmlHelper.ViewContext.RouteData.Values["action"];
    }

    public static MvcHtmlString CurrentController(this HtmlHelper htmlHelper)
    {
        return htmlHelper.ViewContext.RouteData.Values["controller"];
    }
然后你可以这样做:

<% using ("Create", "Section", new { modal = true }, FormMethod.Post, new { enctype = "multipart/form-data" }))
<% using (Html.CurrentAction, Html.CurrentController, new { modal = true }, FormMethod.Post, new { enctype = "multipart/form-data" }))
让我知道这是否有帮助。
干杯

我用一条旧的帖子回答,因为我在搜索同样的东西时,它在谷歌搜索中排名第二:)在这篇文章中找到:

使用MVC3(不确定MVC2),您可以为操作和控制器传入null,并获得BeginForm()将使用的默认路由

@Html.BeginForm(null, null, FormMethod.Post, new { enctype="multipart/form-data"})

干杯

这确实有帮助,但看起来有点牵强。问题是,每隔一天我就会遇到另一个特殊情况,我必须编写一些自定义帮助程序或扩展来实现一些基本功能,这些功能应该已经存在了,但显然ASP.NET MVC设计人员错过了。我想知道这种情况还会持续多久你看到的90%的MVC“助手”漂浮在网络上或其他地方,只是语义上的糖分,只能缩短其他冗长的调用。MVC团队是否“遗漏”了什么。大多数时候,你需要的东西就在你面前,你只需要知道去哪里找就行了。我同意jfar。。。90%的时间它都是我想要它做的,但我喜欢这样一个事实:当它不在那里时,我可以无缝地添加我需要的功能,以上就是一个例子。