Sil*_*ter 6 asp.net-mvc asp.net-mvc-migration
我在App_Code目录下的文件中有一个帮助方法.该方法在MVC 3中运行得非常好,但在升级到MVC 4后却没有.它在第一个@if()块失败了......
[编辑]这看起来像是Razor引擎中的解析错误.当我的所有对象及其属性都不为null时,我得到'对象引用没有设置为对象的实例'错误.我想我必须直接去微软.
[编辑]错误消息是旧的"对象引用未设置为对象的实例".这很奇怪,因为条件中的每个对象AND属性都是有效的而不是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> }
Run Code Online (Sandbox Code Playgroud)
[更新]我改变了一些代码,现在它甚至更奇怪了.我在上面得到了与上面相同的错误:
var tLink = "http://www.twitter.com/" + contactTwitterHandle.Handle;
Run Code Online (Sandbox Code Playgroud)
contactTwitterHandle和contactTwitterHandle.Handle都是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;
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>
}
Run Code Online (Sandbox Code Playgroud)
我找到了解决这个问题的方法,但首先要了解一些历史。对于这个特定的 MVC 项目,我们决定开始逐步实施 Razor。该应用程序有很多“模态”区域,通过 AJAX 调用来获取部分视图来填充这些区域。这些部分视图是第一个作为 Razor 视图实现的。后来,我们想使用 Razor 部分视图在标准 ASPX 视图页面中实现一项新功能,但 ASPX 视图引擎无法渲染部分 Razor 视图,因此我没有使用 Razor 视图,而是在 App_Code 文件夹中添加了一个 MVC 帮助程序文件:呈现该功能的方法。此方法是升级到 MVC4 后导致错误的原因。具有此方法呈现的功能的页面就是我要转换为 Razor 视图页面的页面,因此我今天意识到我需要做的就是将代码从该方法移动到 Razor 部分视图中。 这解决了问题,但是,我仍然认为这是使用辅助方法渲染的 Razor 引擎中的一个错误。
| 归档时间: |
|
| 查看次数: |
1808 次 |
| 最近记录: |