0

aタグを生成するための次のコードがあります。

<ul>
    @foreach (var schedule in scheduleGroup)
    {
        <li>
        @Html.ActionLink(string.Format("{0:HH\\:mm}", schedule.RecurrenceStart), "EventOverview", "BaseEvent", new { id = schedule.BaseEvent.OID, type = schedule.BaseEvent.XPObjectType}, new Dictionary<string, object>
                {
                   {"session", schedule.SessionId},
                   {"hall",schedule.HallId},
                   {"client",schedule.BasePlace.PremieraClientId}                                                                       
                })
    } 
</ul>

ただし、html 属性はaタグに正しく表示されません。これは生成されたマークアップです:

<a href="/Film/Event/36" values="System.Collections.Generic.Dictionary`2+ValueCollection[System.String,System.Object]" keys="System.Collections.Generic.Dictionary`2+KeyCollection[System.String,System.Object]" count="3" comparer="System.Collections.Generic.GenericEqualityComparer`1[System.String]">20:15</a>

エラーはどこにありますか?
ありがとう。

更新: 私は以下が欲しい:

<a client="1" hall="1" session="15" href="/BaseEvent/EventOverview?id=36&type=Film"> 20:15 </a>
4

1 に答える 1

1

あなたのコード:

@Html.ActionLink(string.Format("{0:HH\\:mm}", schedule.RecurrenceStart), "EventOverview", "BaseEvent", 
                new { id = schedule.BaseEvent.OID, type = schedule.BaseEvent.XPObjectType},
                new Dictionary<string, object>
                                {
                                   {"session", schedule.SessionId},
                                   {"hall",schedule.HallId},
                                   {"client",schedule.BasePlace.PremieraClientId}                                                                       
                                })

@Tommy が「セッション」、「ホール」、「スケジュール」が queryStirng パラメータであると言ったようにリンクを生成することを意図している場合、コードは次のようになります。

@Html.ActionLink(string.Format("{0:HH\\:mm}", "schedule.RecurrenceStart"), "EventOverview", "BaseEvent",
        new { id = schedule.BaseEvent.OID, type = schedule.BaseEvent.XPObjectType, 
                session= schedule.SessionId, hall =schedule.HallId,  client =schedule.BasePlace.PremieraClientId},
        null)

それ以外の場合、'session'、'hall'、'schedule' を html 属性として (指定されたコードに従って) 必要な場合は、2 つの一致するActionLinkメソッド シグネチャがあります。

public static MvcHtmlString ActionLink(
    this HtmlHelper htmlHelper,
    string linkText,
    string actionName,
    string controllerName,
    Object routeValues,
    Object htmlAttributes
)

public static MvcHtmlString ActionLink(
    this HtmlHelper htmlHelper,
    string linkText,
    string actionName,
    string controllerName,
    RouteValueDictionary routeValues,
    IDictionary<string, Object> htmlAttributes
)

それらのいずれかを選択する必要があります。つまり、パラメーター 'routeValues' と 'htmlAttributes' の両方を匿名オブジェクト (1 つ目) または型指定されたオブジェクトとして送信します。'routeValues' には 'RouteValueDictionary'、'htmlAttributes' にはIDictionary<string, Object>' 指定されたコードは最初のものと一致したため、タイプの「htmlAttributes」がIDictionary<string, Object>オブジェクトとして扱われ、誤ったタグが生成されます。

正しいコードは次のとおりです。

@Html.ActionLink(linkText: string.Format("{0:HH\\:mm}", "schedule.RecurrenceStart"), actionName: "EventOverview", controllerName: "BaseEvent",
        routeValues: new { id = schedule.BaseEvent.OID, type = schedule.BaseEvent.XPObjectType },
        htmlAttributes: new
        {
            session = schedule.SessionId,
            hall = schedule.HallId,
            client = schedule.BasePlace.PremieraClientId
        } )

または

@Html.ActionLink(string.Format("{0:HH\\:mm}", "schedule.RecurrenceStart"), "EventOverview", "BaseEvent",

        new RouteValueDictionary(new { id = schedule.BaseEvent.OID, type = schedule.BaseEvent.XPObjectType }),

        new Dictionary<string, object>
            {
                {"session", schedule.SessionId},
                {"hall", schedule.HallId},
                {"client", schedule.BasePlace.PremieraClientId}                                                                       
            })
于 2012-04-16T03:58:45.440 に答える