我一直在努力将MVC4项目转换为MVC5。第一天我遇到了一个“Microsoft.CSharp.RuntimeBinder.RuntimeBinderException”,但是能够通过开始我的转换来解决它。我不知道修复是什么是一个很大的,因为它再次发生。
当加载Login.cshtml页面时,_ExternalLoginsListPartial.cshtml中出现错误。错误在第15行抛出(string action = Model.Action;)
@using Microsoft.Owin.Security @{ var loginProviders = Context.GetowinContext().Authentication.GetExternalAuthenticationTypes(); var authenticationDescriptions = loginProviders as AuthenticationDescription[] ?? loginProviders.ToArray(); if (!authenticationDescriptions.Any()) { <div> <p>There are no external authentication services configured. See <a href="http://go.microsoft.com/fwlink/?LinkId=313242">this article</a> for details on setting up this ASP.NET application to support logging in via external services.</p> </div> } else { string action = Model.Action; string returnUrl = Model.ReturnUrl; using (Html.BeginForm(action,"Account",new { ReturnUrl = returnUrl })) { @Html.AntiForgeryToken() <div id="socialLoginList"> <p> @foreach (AuthenticationDescription p in authenticationDescriptions) { <button type="submit" class="btn btn-default padded-8 margin-8" id="@p.AuthenticationType" name="provider" value="@p.AuthenticationType" title="Log in using your @p.Caption account"> <img src="@Url.Content("~/Content/Brands/"+p.Caption+".png")" alt="Microsoft" class="img-responsive" /> <br/> <b>@p.Caption</b> </button> } </p> </div> } } }
抛出的错误是
An exception of type ‘Microsoft.CSharp.RuntimeBinder.RuntimeBinderException’ occurred in System.Core.dll but was not handled in user code
Additional information: ‘object’ does not contain a deFinition for ‘Action’
快照说
Message : object’ does not contain a deFinition for ‘Action’
Source : Anonymously Hosted Dynamicmethods Assembly
现在这是双重的,因为当我设置一个断点Model.Action不为null。我可以看到价值。
这真的令人沮丧。该应用程序工作5分钟前..我已经更改了一个非相关页面上的html,现在它不工作。
黑客修复
我宁愿知道为什么这个错误发生。也就是说,我有一个快速的修复,以防其他人遇到这个(因为这是默认解决方案的一部分)。解决方案是不使用动力学。创建您自己的viewmodel并传递。
public class ExternalLoginviewmodel { [display(Name = "ReturnUrl")] public string ReturnUrl { get; set; } [required] [display(Name = "Action")] public string Action { get; set; } } @Html.Partial("_ExternalLoginsListPartial",new ExternalLoginviewmodel { Action = "ExternalLogin",ReturnUrl = ViewBag.ReturnUrl })
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。