3

私は次のようなアクションを持っています

 public class EmployerController : Controller
 {
 public ActionResult Message(string contractorId, int projectId)
 {....}

および @html.ActionLink として

 @Html.ActionLink("Message", "Message", "Employer", new { contractorId = @model.ContractorId, projectId = @model.ProjectId }, null)

私は次のようなURLになります

http://localhost:3597/Employer/Message?contractorId=contractor&projectId=10

一方、次のようなURLが必要です

http://localhost:3597/Employer/Message/contractor/10

私のRouteConfig.csに、追加しました

 routes.MapRoute(
            name: "MessageRoute",
            url: "Employer/Message/{contractorId}/{projectId}",
            defaults: new { controller = "Employer", action = "Message", contractorId = (string)null, projectId = 0 }
       );

何が欠けていますか。ルートでクエリ文字列を無効にする方法は?

/ありがとう。

4

2 に答える 2

0

あなたの RouteConfig.cs には、上記の投稿で言及したルート (「MessageRoute」) がありますか、それともデフォルトのルート (以下) もありますか? 「MessageRoute」ルートの前に次のデフォルトルートが登録されている可能性があると思われます。それがこの動作が見られる理由です。

routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

はいの場合、これらのルートの登録順序を反転する必要があります。

于 2013-06-07T22:08:23.747 に答える
0

このようにルートURLでURLを生成できます

<a href='@Url.RouteUrl("MessageRoute", new { contractorId = 6, projectId = 5})'>link</a>

そしてあなたのルート

 routes.MapRoute(
        name: "MessageRoute",
        url: "Employer/Message/{contractorId}/{projectId}",
        defaults: new { controller = "Employer", action = "Message", contractorId = UrlParameter.Optional, projectId = UrlParameter.Optional }
   );

私のために働く結果のURLは

/Employer/Message/6/5 

または、/Employer/Message/contraktor/6/project/5 のような URL が必要な場合は、ルートを次のように変更します。

        routes.MapRoute(
        name: "MessageRoute",
        url: "Employer/Message/contraktor/{contractorId}/project/{projectId}",
        defaults: new { controller = "Employer", action = "Message", contractorId = UrlParameter.Optional, projectId = UrlParameter.Optional }
   );
于 2013-06-08T12:30:14.300 に答える