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

Я пытаюсь использовать сообщение в блоге Стива Сандерсона для редактирования списка переменной длины в моем представлении 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());
    }

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; }
    }
}

РЕДАКТИРОВАТЬ

Я смог заставить демонстрацию работать в проекте вне решения, которое я сейчас использую, так что это, очевидно, связано с некоторыми библиотеками в этом рабочем пространстве. Однако теперь я выше своего уровня выплат, так как не уверен, как отладить что-то подобное. Вот исключения, которые определены 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

ОБНОВИТЬ

Выбрав опцию "Native Code" в меню отладчиков проекта

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

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

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

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

1 ответ

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

Сначала замените 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>

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

[HandleProcessCorruptedStateExceptions]
public ViewResult NewRelationshipCode(YourViewModel model)
{
    model.AgentRelationshipCodes.Add(new AgentRelationshipCodes());
    return View("fieldset", model);
}
Другие вопросы по тегам