0

プロジェクトに T4MVC をインストールしたところ、問題が発生しました。

私のコントローラーでは、問題なくアクションへのリダイレクトを呼び出すことができます:

  return RedirectToAction(Actions.Index());

私のビューからそれを呼び出すと、ArgumentOutOfRangeException が発生します。

@Html.ActionLink("Delete Dinner", MVC.Home.Index())

正しく実行したことを確認するために、新しい MVC ソリューションを作成しましたが、その行は機能します。HomeController から「baseController」の継承を削除し、T4MVC を再インストールして、干渉しないようにしました。これを探し始める場所さえわかりません。拡張メソッドで爆発するように見えるため、デバッグは役に立ちません。

[ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index]
   System.ThrowHelper.ThrowArgumentOutOfRangeException() +72
   System.Collections.ObjectModel.Collection`1.set_Item(Int32 index, T value) +10419142
   System.Web.Mvc.ControllerContext.get_RequestContext() +25
   System.Web.Mvc.Html.LinkExtensions.RouteLink(HtmlHelper htmlHelper, String linkText, String routeName, String protocol, String hostName, String fragment, RouteValueDictionary routeValues, IDictionary`2 htmlAttributes) +47
   System.Web.Mvc.T4Extensions.ActionLink(HtmlHelper htmlHelper, String linkText, ActionResult result, IDictionary`2 htmlAttributes, String protocol, String hostName, String fragment) +196
   System.Web.Mvc.T4Extensions.ActionLink(HtmlHelper htmlHelper, String linkText, ActionResult result) +72
   ASP._Page_Views_Home_Index_cshtml.Execute() in c:\Thva\Misc\DropBox\Work\MyProjects\Wims\Wims.Website\Views\Home\Index.cshtml:53

何か案が?前もって感謝します

編集:これを試してみましたが、まだ機能しません:新しいコントローラーを作成します:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace Wims.Website.Controllers
{
    public partial class MyTestController : Controller
    {
        //
        // GET: /MyTest/

        public virtual ActionResult Index()
        {
            return View();
        }

    }
}

AutoT4MVC を実行し、表示:

@{
    ViewBag.Title = "Index";
}
@Html.ActionLink("aiaieiae", MVC.MyTest.Index())
<h2>Index</h2>

依存関係がないことを確認するには、自分のページを呼び出しても機能しません。

http://localhost:2303/MyTest/index
4

4 に答える 4

3

同じ問題がありました。次に、ビルド ログに次の警告が見つかりました。

> Consider app.config remapping of assembly "System.Web.Mvc, Culture=neutral, PublicKeyToken=31bf3856ad364e35" from Version "3.0.0.0" [C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 3\Assemblies\System.Web.Mvc.dll] to Version "4.0.0.0" to solve conflict and get rid of warning.
...and same warnings for System.Web.WebPages, System.Web.Razor, System.Web.WebPages.Deployment, System.Web.WebPages.Razor
> C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1605,5): warning MSB3247: Found conflicts between different versions of the same dependent assembly.

次の行を web.config に追加して、警告メッセージが示唆することを行いました。

<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
                <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
            </dependentAssembly>
        </assemblyBinding>
        ...the same for the other assemblies
    </runtime>
</configuration>

それだけです - T4MVC は正常に動作します。時々、NuGet はこれらの行を自動的に追加しますが、今回はそうしなかった理由はわかりません。

このソリューションでは、新しい Web プロジェクトを作成してソース コードをコピーすると、この問題が解決する理由についても説明しています。

于 2013-09-10T15:32:59.983 に答える
0

スタックに基づくと、T4MVC とは関係のないリクエスト コンテキストへのアクセスに問題があるようです。分離するには、T4MVC 行を削除して、単純に次のように記述してみてください。

@ViewContext.RequestContext

あなたの見解では?を試すこともできます@Html.ViewContext.RequestContext。同じ例外が表示されると思います。もしそうなら、何が原因なのかはわかりませんが、少なくとも一歩近づきます.

もう 1 つ試してみてください: 通常の MVCは機能しますかActionLink、それとも失敗するのは T4MVC だけActionLinkですか?

于 2012-12-19T15:18:19.370 に答える
0

私は David Ebbo と一緒にこれを調べました (彼の時間に感謝します) が、なぜそれが機能しないのかを見つけることができませんでした。

自分の名前空間を使用してプロジェクトに T4MVC コードをコピーして貼り付けた後、それらのメソッドを使用して動作していました..

だから、私はちょうど新しいMVC Webサイトを再作成し、すべてを再インポートしました..楽しいことではありませんが、T4MVCは苦労する価値があると思います:)

于 2012-12-20T07:17:37.230 に答える