Bezdepbonusu7Программирование: статьи и ответы

Вопрос

AccessViolationException не было обработано

Автор вопроса: NealRОтветов: 1

Я пытаюсь использовать сообщение в блоге Стива Сандерсона для редактирования списка переменной длины в представлении ASP MVC 3. Проект строится нормально, однако всякий раз, когда частичное представление отображается, программа взрывается на строке using(Html.BeginColletionItem() с этой ошибкой:

AccessViolationException was unhandled
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

Вот скриншот полного исключения

введите здесь описание изображения

Полная трассировка стека ниже

at Microsoft.VisualStudio.WebHost.Host.ProcessRequest(Connection conn)
at Microsoft.VisualStudio.WebHost.Server.OnSocketAccept(Object acceptedSocket)
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

Частичный просмотр

@model Monet.Models.AgentRelationshipCodes


@using (Html.BeginCollectionItem("AgentRelationshipCodes")) @*Exception thrown here*@
{
    <tr>
        <td>@Html.EditorFor(model => model.EffectiveDate, "NullableDate", new { @class = "relCodeDate2" })</td>
        <td>@Html.EditorFor(model => model.RelationshipId, "NullableDate", new { @class = "relDistCode1", maxlength = 3 })</td>
        @Html.HiddenFor(model => model.ID)
        @Html.HiddenFor(model => model.RelCodeOrdinal)
    </tr>
}

Просмотреть

    <script>
    $(document).ready(function() {
        $(".addCode").click(function () {
                $.ajax({
                url: '@Url.Action("NewRelationshipCode", "AgentTransmission")',
                dataType: 'html',
                cache: false,
                success: function (html) {
                    console.log(html);
                    $("#Experiment > tbody").append(html);
                }
            })
        });
    });
    </script>
    .
    .
<fieldset>
    <legend>Relationship Codes</legend>
    <table id="Experiment">
        <thead>
            <tr>
                <th>Relationship Effective Date</th>
                <th>Relationship Dist Code</th>
            </tr>
        </thead>
        <tbody>
            @foreach (var item in Model.AgentRelationshipCodes)
            {
                @Html.Partial("AddRelationshipCodePartial", item)
            }
        </tbody>
    </table>
    <br/>
    <a href="javascript:void(0)" class ="addCode">Add Another</a>
</fieldset>

Контроллер

    [HandleProcessCorruptedStateExceptions]
    public ViewResult NewRelationshipCode()
    {
        return View("AddRelationshipCodePartial", new AgentRelationshipCodes());
    }

Коды отношений агентов

namespace Monet.Models
{
    using System;
    using System.Collections.Generic;

    public partial class AgentRelationshipCodes
    {
        public int ID { get; set; }
        public int RelCodeOrdinal { get; set; }
        public string RelationshipId { get; set; }
        public Nullable<System.DateTime> EffectiveDate { get; set; }
        public System.DateTime LastChangeDate { get; set; }
        public string LastChangeId { get; set; }

        public virtual AgentTransmission AgentTransmission { get; set; }
    }
}

ИЗМЕНИТЬ

Мне удалось заставить демо работать в проекте за пределами решения, которое я использую прямо сейчас, поэтому, очевидно, это связано с некоторыми dll в этой рабочей области. Однако теперь я выше своего уровня заработной платы, так как не знаю, как отлаживать что-то подобное. Вот исключения, которые идентифицируются WinDbg до того, как Visual Studio выдаст ошибку AccessViolationException. Существует МНОГО информации между выбрасываемыми исключениями, если это кому-то нужно, пожалуйста, дайте мне знать.

*** WARNING: Unable to verify checksum for C:\Windows\assembly\NativeImages_v4.0.30319_32\mscorlib\d12f4fda3d1bfabf888342e96983e9a7\mscorlib.ni.dll
*** ERROR: Module load completed but symbols could not be loaded for C:\Windows\assembly\NativeImages_v4.0.30319_32\mscorlib\d12f4fda3d1bfabf888342e96983e9a7\mscorlib.ni.dll

*** WARNING: Unable to verify checksum for C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Xaml\9d3572e8c3c314a0f12383d41e8bee78\System.Xaml.ni.dll
*** ERROR: Module load completed but symbols could not be loaded for C:\Windows\assembly\NativeImages_v4.0.30319_32\System.Xaml\9d3572e8c3c314a0f12383d41e8bee78\System.Xaml.ni.dll

*** WARNING: Unable to verify checksum for C:\Windows\assembly\NativeImages_v4.0.30319_32\Presentatio5ae0f00f#\8711b01d60a94d6ef6a02d7fd0578493\PresentationFramework.ni.dll
*** ERROR: Module load completed but symbols could not be loaded for C:\Windows\assembly\NativeImages_v4.0.30319_32\Presentatio5ae0f00f#\8711b01d60a94d6ef6a02d7fd0578493\PresentationFramework.ni.dll

*** WARNING: Unable to verify checksum for C:\Windows\assembly\NativeImages_v4.0.30319_32\WindowsBase\ac2e26bafa70e93b307087d7fe6b9dd2\WindowsBase.ni.dll
*** ERROR: Module load completed but symbols could not be loaded for C:\Windows\assembly\NativeImages_v4.0.30319_32\WindowsBase\ac2e26bafa70e93b307087d7fe6b9dd2\WindowsBase.ni.dll

*** WARNING: Unable to verify checksum for C:\Windows\assembly\NativeImages_v4.0.30319_32\Microsoft.V4e91a071#\207156ac71b58fb31310a2f78c3d0c44\Microsoft.VisualStudio.Web.Application.ni.dll
*** ERROR: Module load completed but symbols could not be loaded for C:\Windows\assembly\NativeImages_v4.0.30319_32\Microsoft.V4e91a071#\207156ac71b58fb31310a2f78c3d0c44\Microsoft.VisualStudio.Web.Application.ni.dll

ОБНОВЛЕНИЕ

Выбрав опцию "Собственный код" в меню "Отладчики" проекта.

введите здесь описание изображения

Теперь я получаю немного более подробное сообщение об ошибке:

введите здесь описание изображения

Наконец, переключившись на IIS Express, как предложено ниже, я все еще получаю ошибку AccessViolationException. Вот настройки, которые я использовал для включения IIS для отладки (в свойствах проекта)

введите здесь описание изображения

Вот сообщение об ошибке

введите здесь описание изображения

Стек вызовов:

введите здесь описание изображения

  • AccessViolationException означает неуправляемый компонент (фактически любую нативную DLL... например, virtualbox.org/ticket/9317), используемый ProcessRequest, завершился внутренним сбоем. Нужно прицепиться с отладчиком, чем можно сделать дамп нативных фреймов, например WinDbg, чтобы определить первопричину проблемы, хотя бы найти подозрительную DLL. Simon Mourier 15.05.2014
  • Попробуйте удалить ссылки и вместо этого используйте самородок AntoineLev 16.05.2014
  • У вас установлены сторонние инструменты VS/Code? Mikhail 17.05.2014
  • если вы запустите его демонстрационный проект, то вы узнаете, что это ошибка вне этого фрагмента кода. посмотрите на неуправляемые dll (может быть, web gl?) John Nicholas 19.05.2014
  • Вероятно, было бы полезно показать нам модель AgentRelationshipCodes, особенно конструктор. Paul Zahra 20.05.2014
  • @PaulZahra - только что добавил модель в пост NealR 20.05.2014

access-violationbegincollectionitem

Ответы

Ответ 1 · рейтинг 1 · B2K

Мне кажется, ты работаешь усерднее, чем нужно.

Во-первых, замените foreach циклом for, передавая индексированный элемент в шаблон редактора. Это установит контекст вашего шаблона.

<fieldset>
    <legend>Relationship Codes</legend>
    <table id="Experiment">
        <thead>
            <tr>
                <th>Relationship Effective Date</th>
                <th>Relationship Dist Code</th>
            </tr>
        </thead>
        <tbody>
            @for (var i = 0; i < Model.AgentRelationshipCodes.Count(); i++)
            {
                @Html.EditorFor(model => model.AgentRelationshipCodes[i])
            }
        </tbody>
    </table>
    <br/>
    <a href="javascript:void(0)" class ="addCode">Add Another</a>
</fieldset>

Затем создайте шаблон редактора с именем AgentRelationshipCodes.cshtml (в Views/Shared/EditorTemplates).

@model Monet.Models.AgentRelationshipCodes
<tr>
    <td>@Html.EditorFor(model => model.EffectiveDate, "NullableDate", new { @class = "relCodeDate2" })</td>
    <td>@Html.EditorFor(model => model.RelationshipId, "NullableDate", new { @class = "relDistCode1", maxlength = 3 })</td>
    @Html.HiddenFor(model => model.ID)
    @Html.HiddenFor(model => model.RelCodeOrdinal)
</tr>

Это устраняет необходимость в пользовательских помощниках, которые, по-видимому, вызывают проблему.

Наконец, для добавления новых элементов переместите набор полей в частичное:

<script>
    $(document).ready(function() {
       $(".addCode").click(function () {
            $('#fieldset').load('@Url.Action("NewRelationshipCode", "AgentTransmission")',$('#fieldset').closest('form').serialize());
       });
    });
</script>

<div id="fieldset">
   @Html.Partial("fieldset");
</div>

И верните представление набора полей из вашего метода действия NewRelationshipCode:

[HandleProcessCorruptedStateExceptions]
public ViewResult NewRelationshipCode(YourViewModel model)
{
    model.AgentRelationshipCodes.Add(new AgentRelationshipCodes());
    return View("fieldset", model);
}

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы