私は、App_Codeディレクトリ下のファイルにヘルパーメソッドを持っています。このメソッドはMVC 3では完全に正常に動作しますが、MVC 4にアップグレードした後は正しく動作しません。最初の@if()ブロックで失敗しています...MVC 3から4へのアップグレード後にRazorヘルパーメソッドが機能しない
[編集]これはRazorエンジンの解析エラーのようです。すべてのオブジェクトとそのプロパティがnullでないときに 'オブジェクト参照がオブジェクトのインスタンスに設定されていません'というエラーが表示されます。私はMicrosoftに直接行く必要があると思う。
[編集]エラーメッセージは、古い「オブジェクト参照がオブジェクトのインスタンスに設定されていません」です。条件内の各オブジェクトとプロパティが有効で、nullではないため、これは奇妙です。
@helper RenderConnectButton(System.Web.Mvc.HtmlHelper helper, ContactTwitterHandleDto contactTwitterHandle, ContactFacebookAccountDto contactFacebookAccount) {
<ul class="socialMedia inlineList">
@if (contactTwitterHandle != null && contactTwitterHandle.IsValid.HasValue && contactTwitterHandle.IsValid.Value)
{
var tHandle = "@" + contactTwitterHandle.Handle;
<li class="twitter">
<a class="btn" href="http://www.twitter.com/@contactTwitterHandle.Handle" target="_blank">
<i></i>
<span class="label">@tHandle</span>
</a>
@if(contactTwitterHandle.FollowerCount.HasValue)
{
<div class="count" id="c">
<i></i>
<u></u>
<span class="followers" title="@contactTwitterHandle.FollowerCount.Value followers">@FollowerCount(contactTwitterHandle.FollowerCount.Value)</span>
</div>
}
</li>
<script type="text/javascript">
$("#twitter").click(function() {
window.location.href = '@(helper.BuildUrlFromExpression<TenantController>(t => t.LinkTwitterAccount()))';
})
</script>
}
@if (contactFacebookAccount != null && contactFacebookAccount.IsValid.HasValue && contactFacebookAccount.IsValid.Value)
{
<li class="facebook">
<a class="btn" href="@contactFacebookAccount.Url" target="_blank">
<i></i>
<span class="label">@contactFacebookAccount.Name</span>
</a>
@if(contactFacebookAccount.FriendCount.HasValue)
{
<div class="count" id="c">
<i></i>
<u></u>
<span class="followers" title="@contactFacebookAccount.FriendCount.Value friends">@FriendCount(contactFacebookAccount.FriendCount.Value)</span>
</div>
}
</li>
}
</ul> }
[UPDATE] 私は、コードを少し変更し、今それも見知らぬ人です。私はラインで上記と同じエラーを取得しています:
var tLink = "http://www.twitter.com/" + contactTwitterHandle.Handle;
contactTwitterHandleとcontactTwitterHandle.Handleは両方ともNULLではありません。私はラインから@tHandleを削除した場合
@helper RenderConnectButton(System.Web.Mvc.HtmlHelper helper, ContactTwitterHandleDto contactTwitterHandle, ContactFacebookAccountDto contactFacebookAccount) {
<ul class="socialMedia inlineList">
@if (contactTwitterHandle != null && contactTwitterHandle.IsValid.HasValue && contactTwitterHandle.IsValid.Value)
{
var tHandle = contactTwitterHandle.Handle;
<li class="twitter">
<a class="btn" href="http://twitter.com/@tHandle" target="_blank">
<i></i>
<span class="label">@tHandle</span>
</a>
</li>
}
</ul>
}
:
<a class="btn" href="http://twitter.com/@tHandle" target="_blank">
それは罰金解析する
@helper RenderConnectButton(System.Web.Mvc.HtmlHelper helper, ContactTwitterHandleDto contactTwitterHandle, ContactFacebookAccountDto contactFacebookAccount) {
<ul class="socialMedia inlineList">
@if (contactTwitterHandle != null && contactTwitterHandle.IsValid.HasValue && contactTwitterHandle.IsValid.Value)
{
var tHandle = "@" + contactTwitterHandle.Handle;
var tLink = "http://www.twitter.com/" + contactTwitterHandle.Handle;
<li class="twitter">
<a class="btn" href="@tLink" target="_blank">
<i></i>
<span class="label">@tHandle</span>
</a>
@if(contactTwitterHandle.FollowerCount.HasValue)
{
<div class="count" id="c">
<i></i>
<u></u>
<span class="followers" title="@contactTwitterHandle.FollowerCount.Value followers">@FollowerCount(contactTwitterHandle.FollowerCount.Value)</span>
</div>
}
</li>
<script type="text/javascript">
$("#twitter").click(function() {
window.location.href = '@(helper.BuildUrlFromExpression<TenantController>(t => t.LinkTwitterAccount()))';
})
</script>
}
@if (contactFacebookAccount != null && contactFacebookAccount.IsValid.HasValue && contactFacebookAccount.IsValid.Value)
{
<li class="facebook">
<a class="btn" href="@contactFacebookAccount.Url" target="_blank">
<i></i>
<span class="label">@contactFacebookAccount.Name</span>
</a>
@if(contactFacebookAccount.FriendCount.HasValue)
{
<div class="count" id="c">
<i></i>
<u></u>
<span class="followers" title="@contactFacebookAccount.FriendCount.Value friends">@FriendCount(contactFacebookAccount.FriendCount.Value)</span>
</div>
}
</li>
}
</ul>
}
おそらくエラーメッセージで「失敗」しますか?それは何ですか? –
これは参考になるかもしれません。私は上記の質問にそれを入れます。 – Silkster
さて、 'contactTwitterHandle'がnullである可能性が非常に高いようです。デバッガを起動し、それがなぜそうであるのかを調べます。 –