国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

ASP.NET MVC 混搭 ASP.NET WebForms 所導致的 Html.ActionLink/BeginForm 問題

2019-11-17 02:02:57
字體:
來源:轉載
供稿:網友

asp.net MVC 混搭 ASP.NET WebForms 所導致的 Html.ActionLink/BeginForm 問題

首先,需要了解下這篇博文:《ASP.NET WebForms MapPageRoute 路由配置》

之前,在 ASP.NET MVC 中混搭 ASP.NET WebForms,使用 MapPageRoute 沒有出現什么問題,但是今天在測試一個表單提交的時候,卻莫名其妙的出現一個詭異的問題,我先大致描述下,就是 MVC View 中使用表單,Html.BeginForm 方法提交到指定控制器的 Action 中進行處理,大致代碼為:

@using (Html.BeginForm("PRofileSubmit", "Set", FormMethod.Post, new { id = "myform" })){    @Html.AntiForgeryToken()    <table class="info_block" cellpadding="0" cellspacing="0">        <tr>            <td class="tr_title">                姓名:            </td>            <td class="tr_content">                @Html.TextBoxFor(n => n.RealName, new { id = "txt_name", @class = "tb_m" })            </td>        </tr>    </table>    <div class="save_block">        <input type="submit" class="btn_blue" name="btnSubmit" value="保存" onclick="return UpdateProfile();" id="btn_submit">        <div class="text_red" style="height: 3em; line-height: 3em;">            <span id="lit_tip">@Model.Message</span>        </div>    </div>}

這是我們最普遍的寫法,把表單數據提交到 Set 控制器的 ProfileSubmit Action 中進行處理,但是在提交的時候,URL 卻變成了:

http://home.VEVb.com/job/myresume?action=ProfileSubmit&controller=Set

是不是很詭異?我明明在 Html.BeginForm 方法中指定了 Controller 和 Action,為什么沒有起作用,反而跳轉到了一個莫名其妙的 URL,根據 URL,我就查看了下路由配置,發現下面的一段配置:

routes.MapPageRoute("JobMyResume",    "job/myresume",    "~/old/job/MyResume.aspx");

注意,這段路由配置并不是使用的 MapRoute,而是 MapPageRoute,是配置 ASP.NET WebForms 路由的,我把這段配置注釋掉,然后就可以了,有點莫名其妙,為什么使用 Html.BeginForm 會映射到這段路由上?最后搜了大量的資料,也沒有找到相關說明,我個人覺得是 MapPageRoute 的問題,ASP.NET MVC 混搭 ASP.NET WebForms,但是在 URL 請求處理的時候,并不是很準確,凡事使用 Html Helps 里面的生成 URL 方法,都存在問題,除了 Html.BeginForm,還有我們常用到的 Html.ActionLink,但是從外部客戶端進入的請求,就沒有任何問題,最后找了一些相關解決方式,也證明了這一點,解決方式很簡單,先添加如下代碼:

public class IncomingRequestConstraint : IRouteConstraint{    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)    {        return routeDirection == RouteDirection.IncomingRequest;    }}

然后 MapPageRoute 的路由配置改為:

routes.MapPageRoute("JobMyResume",    "job/myresume",    "~/old/job/MyResume.aspx", false, null, new RouteValueDictionary(new    {        controller = new IncomingRequestConstraint()    }));

什么意思呢?RouteDirection.IncomingRequest 的意思,就是路由約束限制在外部,也就是說只請求來自客戶端的 URL,內部的 URL 不匹配此路由,像 Html.ActionLink/BeginForm 是 MVC 內部生成的 URL,所以是不被匹配的,RouteDirection 還有另外一個枚舉值 UrlGeneration,它的意思就是只請求內部生成的 URL。

上面這種解決方案,只是臨時的解決方案,也就是像打補丁一樣的處理方式,關于為什么會出現這個問題?MapPageRoute 具體是怎么進行配置的?ASP.NET MVC 混搭 ASP.NET WebForms 請求到底是怎么處理的?這些還不是很清楚,希望大家可以指教。

  • RouteDirection Enumeration
  • Why does the order of route mapping matter when mixing MVC and webforms?
  • Unexpected form url with mixed aspx & controller MVC .Net routes
  • Combining ASP.NET WebForms and ASP.NET MVC

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 星子县| 古丈县| 台东县| 建始县| 贡觉县| 和林格尔县| 调兵山市| 长乐市| 旬邑县| 万源市| 施甸县| 新干县| 怀远县| 渑池县| 青田县| 沁源县| 易门县| 瑞昌市| 叶城县| 南丰县| 葵青区| 扬中市| 河曲县| 彭山县| 大安市| 吉首市| 江源县| 西和县| 泽普县| 叙永县| 雅江县| 宝清县| 和林格尔县| 镇江市| 成都市| 如皋市| 云南省| 娄烦县| 涟水县| 武乡县| 玛多县|