System.Web.Mvc.HtmlHelper<ModelName> не содержит определения для
Я пытаюсь использовать сообщение в блоге Стива Сандерсона о редактировании списка переменной длины. Я установил dll через менеджер пакетов NuGet и убедился, что пространство имен находится в Views/web.config
файл. Тем не менее, я следующая ошибка, когда я пытаюсь написать using
Постулаты.
System.Web.Mvc.HtmlHelper<Monet.Models.AgentTransmission> does not contain a definition
for 'BeginCollectionItem' and no extension method 'BeginCollectionItem' accepting a first
argument of type 'System.Web.Mvc.HtmlHelper<Monet.Models.AgentTransmission>' could be
found (are you missing a using directive or an assmebly reference
Просмотров /Web.config
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="HtmlHelpers.BeginCollectionItem" />
</namespaces>
Частичное представление (обновлено)
@model Monet.Models.AgentRelationshipCodes
@using (Html.BeginCollectionItem("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>
}
Контроллер (на всякий случай)
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.Entity.Validation;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net;
using System.Reflection;
using System.Runtime.Serialization;
using System.Text;
using System.Transactions;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using System.Xml;
using Monet.MonetToDss;
using Monet.Common;
using Monet.Models;
using Monet.ViewModel;
using HtmlHelpers.BeginCollectionItem;
public ViewResult NewRelationshipCode()
{
return View("AddRelationshipCodePartial", new AgentRelationshipCodes());
}
4 ответа
Пожалуйста, попробуйте закрыть и снова открыть решение для изменений, которые будут приняты редактором. После этого я не получаю ошибку
System.Web.Mvc.HtmlHelper не содержит определения для "BeginCollectionItem" и не найден метод расширения "BeginCollectionItem", принимающий первый аргумент типа "System.Web.Mvc.HtmlHelper" (если вы пропустили директиву using или предположительно ссылка
Это сторонняя библиотека от Стива Сандерсона, которую нужно сначала установить с https://www.nuget.org/packages/BeginCollectionItem/:
Install-Package BeginCollectionItem
Мне нужно было добавить
<add namespace="HtmlHelpers.BeginCollectionItem" />
в пространства имен в web.config папки Views. Моя была в папке "Области", поэтому мне нужно было добавить ее в папку "Виды".
Вместо этого вы также можете добавить оператор использования прямо в представление, но затем вы должны не забыть добавить его в каждое представление.
Для.Net Core
Установите пакет nuget:- https://www.nuget.org/packages/BeginCollectionItemCore
а затем добавьте это в _ViewImports.cshtml:@using HtmlHelpers.BeginCollectionItemCore;
Это удар в темноте, но вы пытались удалить спецификатор индекса [i]? Насколько я помню, он вам не нужен при использовании помощника BeginCollectionItem. Он генерирует уникальный индекс сам по себе.
Вот еще несколько ресурсов о помощнике, которые я нашел полезными:
http://ivanz.com/2011/06/16/editing-variable-length-reorderable-collections-in-asp-net-mvc-part-1/ http://justmycode.blogspot.com/2012/07/learning-mvc-editing-variable-length.html
Обновление: пример со ссылкой на комментарий автора
@model Monet.Models.AgentRelationshipCodes
@using (Html.BeginCollectionItem("AgentRelationshipCodes")) @*error displays here*@
{
<tr>
<td>@Html.EditorFor(m => Model.EffectiveDate, "NullableDate", new { @class = "relCodeDate2" })</td>
<td>@Html.EditorFor(m => Model.RelationshipId, "NullableDate", new { @class = "relDistCode1", maxlength = 3 })</td>
@Html.HiddenFor(m => Model.ID)
@Html.HiddenFor(m => Model.RelCodeOrdinal)
</tr>
}