Я работал над преобразованием проекта 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="#" onclick="location.href='http://go.microsoft.com/fwlink/?LinkId=313242'; return false;">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>
}
}
}
Выброшенная ошибка:
Исключение типа "Microsoft.CSharp.RuntimeBinder.RuntimeBinderException" произошло в System.Core.dll, но не было обработано в коде пользователя
Дополнительная информация: "объект" не содержит определения для "Action"
Снимок говорит
Сообщение: объект 'не содержит определения для' Action ' Источник: анонимно размещенная динамическая схема сборки
Теперь это двойное странное, потому что, когда я устанавливаю точку останова Model.Action, не является нулевым. Я вижу значение.
Это действительно расстраивает. Приложение работало 5 минут назад.. Я изменил html на не связанной странице.. и теперь это не сработает.
Hackish Fix Я бы предпочел узнать, почему эта ошибка происходит. Тем не менее, у меня есть быстрое исправление, если кто-то еще сталкивается с этим (Потому что это часть части решения по умолчанию). Решение состоит в том, чтобы не использовать динамику. Создайте свой собственный 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 })