Как я могу записать свою собственную 'файловую систему' в рамках Windows?

Ошибка означает, что значение CategoryList равно нулю (и в результате метод DropDownListFor() ожидает, что первый параметр имеет тип IEnumerable).

Вы не генерируете вход для каждого свойства каждого SelectListItem в CategoryList (и не должен), поэтому никакие значения для SelectList не отправляются в метод контроллера, и поэтому значение model.CategoryList в методе POST равно null , Если вы вернете представление, вы должны сначала переназначить значение CategoryList, как и в методе GET.

public ActionResult Create(ProjectVM model)
{
    if (!ModelState.IsValid)
    {
        model.CategoryList = new SelectList(db.Categories, "ID", "Name"); // add this
        return View(model);
    }
    // Save and redirect
}

Чтобы объяснить внутреннюю работу (исходный код может быть см. здесь )

Каждая перегрузка DropDownList() и DropDownListFor() в конечном итоге вызывает следующий метод

private static MvcHtmlString SelectInternal(this HtmlHelper htmlHelper, ModelMetadata metadata,
  string optionLabel, string name, IEnumerable selectList, bool allowMultiple,
  IDictionary htmlAttributes)

, который проверяет, есть ли selectList (второй параметр из @Html.DropDownListFor()) является null

// If we got a null selectList, try to use ViewData to get the list of items.
if (selectList == null)
{
    selectList = htmlHelper.GetSelectData(name);
    usedViewData = true;
}

, который, в свою очередь, вызывает

private static IEnumerable GetSelectData(this HtmlHelper htmlHelper, string name)

, который оценивает первый параметр @Html.DropDownListFor() (в данном случае CategoryID )

....
o = htmlHelper.ViewData.Eval(name);
....
IEnumerable selectList = o as IEnumerable;
if (selectList == null)
{
    throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, 
        MvcResources.HtmlHelper_WrongSelectDataType,
        name, o.GetType().FullName, "IEnumerable"));
}

Поскольку свойство CategoryID является typeof int, оно не может быть передано в IEnumerable, и генерируется исключение (которое определено в файле MvcResources.resx как)


    The ViewData item that has the key '{0}' is of type '{1}' but must be of type '{2}'.

24
задан Null 26 December 2009 в 04:43
поделиться

5 ответов

Попробуйте Dokan. Это как FUSE, за исключением Windows. Я думаю, что есть определенные ограничения для расширений пространства имен, как будто они не могут быть доступны из командной строки, но я действительно не уверен на данный момент.

.
21
ответ дан 28 November 2019 в 23:55
поделиться

Для справки: виртуальные диски можно создавать с помощью нашего продукта Callback File System , который является поддерживаемым, документированным и поддерживаемым решением.

1
ответ дан Eugene Mayevski 'Allied Bits 28 November 2019 в 23:55
поделиться

Запись настоящей файловой системы включает в себя запись драйвера , что означает код режима ядра (страшные вещи) и оплату за получение IFS DDK. (edit: похоже, они больше не платят за это)

Вероятно, вам нужно "расширение пространства имен". Попробуйте это: Полное руководство идиота по написанию расширений пространства имен - CodeProject

10
ответ дан 28 November 2019 в 23:55
поделиться

Это может быть отправной точкой для расширения NTFS так, как это делала файловая система GMail: Windows NT переопределяет точки .

1
ответ дан 28 November 2019 в 23:55
поделиться

Файловая система GMail - это просто указанное имя; это не какая-либо файловая система как таковая. Это просто расширение пространства имен для проводника Windows, которое связывается с вашей учетной записью GMail!

Я не знаю точно, что вы пытаетесь сделать, но в любом случае, я думаю, что следующая ссылка будет вам полезна:

http://msdn.microsoft.com/en-us/magazine/cc188741.aspx

1
ответ дан 28 November 2019 в 23:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: