-1

次のコントローラー アクションを検討してください。

public ActionResult List(int userid = 0)
{
    var campaigns = db.Dyn_Campaigns.Where(c => c.UserID == userid);
    return View(campaigns.ToList());
}

モデルの UserID フィールドは int です。

これはビューです:

@model IEnumerable<KnockoutExample.Models.Dyn_Campaigns>

@{
    ViewBag.Title = "List";
 }

<h2>List</h2>

<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
<tr>
    <th>
        @Html.DisplayNameFor(model => model.DateCreation)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.CompanyID)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.UserID)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.Name)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.Descr)
    </th>
    ...
</tr>

@foreach (var item in Model) {
<tr>
    <td>
        @Html.DisplayFor(modelItem => item.DateCreation)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.CompanyID)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.UserID)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Name)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Descr)
    </td>
    ...
    <td>
        @Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
        @Html.ActionLink("Details", "Details", new { id=item.ID }) |
        @Html.ActionLink("Delete", "Delete", new { id=item.ID })
    </td>
</tr>
}

</table>

そして、これは global.asax での私のカスタム ルーティングです。

  config.Routes.MapHttpRoute("MyRoute", "{controller}/{action}/{userid}",
  new { controller = "Campaigns", action = "List", userid = UrlParameter.Optional });

問題は、useridパラメーターが常にデフォルト値 (0) を取得することです。ここで何が間違っていますか?

4

4 に答える 4

1

次のようにregisterRoutesを変更します

public static void RegisterRoutes(RouteCollection routes)
            {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
     routes.MapRoute("MyRoute", "{controller}/{action}/{userid}",
                    new { controller = "Campaigns", action = "List", userid = UrlParameter.Optional });    

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


            }
于 2013-03-21T10:31:38.953 に答える
1

原因はUrlParameter.Optionalint ではありません。useridそれ以外の場合は、ユーザー ID が見つかりません。例: あなたのコントローラーで:

public ActionResult List(int userid = 0)
{
...
}

あなたのモデルで(例えば)

Myclass{
    int id;
}

あなたの見解では:

 @model MyApp.Model.MyClass
 ...
    new { controller = "Campaigns", action = "List", userid =  model.id});

Asp.net MVC 4 では、ビューとコントローラーのパラメーターは同じ型と名前である必要があります。

于 2013-03-18T15:44:07.690 に答える
0

パラメータを次のように変更します。

public ActionResult List(int userid = 0)

に:

public ActionResult List(int id)

問題を解決しました。しかし、メソッドが同じ型のパラメーターを受け入れず、名前が異なる理由はまだわかりません。

RouteConfig は次のようになります。

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

        routes.MapRoute("MyRoute", "{controller}/{action}/{userid}",
            new { controller = "Campaigns", action = "List", userid = UrlParameter.Optional });
    }
于 2013-03-20T06:48:51.063 に答える
-1

userid が欠落している場合、パラメーターとして 0 を取得しているため、null 可能にする必要があります

 public ActionResult List(int? userid)
{
var campaigns = db.Dyn_Campaigns.Where(c => c.UserID == userid);
return View(campaigns.ToList());
}

あなたの編集に基づいて編集

パラメータ名IDを渡しています。それはuseridである必要があります

@Html.ActionLink("Edit", "Edit", new { userid=item.ID }) |
    @Html.ActionLink("Details", "Details", new { userid=item.ID }) |
    @Html.ActionLink("Delete", "Delete", new { userid=item.ID })
于 2013-03-18T15:53:31.183 に答える