Образцовый объект, переданный в словарь, имеет тип ‘mvc. Модели. ModelA’, но этот словарь требует образцового объекта типа ‘mvc. Модели. ModelB‘

Написание эффективных регулярных выражений начинается с формулировки того, что вам действительно нужно. В вашем случае это выглядит так, как будто вы хотите:

«Заменить все периоды символами новой строки, если только период не является частью числа».

И чтобы сделать это еще более точным, определим Что это означает, что точка является частью числа: это, вероятно, означает, что за ним непосредственно следует число, так что оно соответствует 5.4, но также .4 в The average score of .4 was low., но не 4. в She only counted a total of 4.. ]

«Заменить все периоды символами новой строки, если за точкой сразу не следует цифра».

import re

text = '"I have .5 dollar. I need 5.4 dollar. But they only gave me 3."'

expression = re.compile(r'\.(?!\d)')
print(expression.sub('\n', text))

Вместо этого ваш пример \D(\.) соответствовал: «Соответствует одному символу это не цифра, за которой следует буквальное . ", которое вы не хотели заменить.

Новое выражение \.(?!\d) соответствует «Соответствует литералу ., но только если за ним не следует цифра». Он использует то, что называется негативным взглядом, подробнее об этом здесь https://www.regular-expressions.info/lookaround.html

70
задан Community 23 May 2017 в 12:10
поделиться

6 ответов

Я получил эту ошибку при использовании Episerver. Я просто изменил оператор возврата в контроллере от return View();

к

return PartialView();

0
ответ дан 24 November 2019 в 13:15
поделиться

Эта ошибка может возникнуть (и возникает), когда есть несоответствие между данными, которые метод действия контроллера передает представлению, и типом данных, которые ожидает представление. Обычно это не проявляется как ошибка сборки, даже в случае предварительно скомпилированных представлений.

Например, если у меня есть метод...

public ActionResult Create()
{
    // Do something
    return View(new CustomerCreateViewModel());
}

... и представление Create с атрибутом Page...

<%@ Page ... Inherits="System.Web.Mvc.ViewPage<CustomerDetailsViewModel>" %>

... это компилируется и собирается без ошибок. Однако, когда я вызову действие Create, я получу желтый экран, потому что метод действия Create выбрасывает данные одного типа, а представление ожидает данные другого типа. Возможно, вы захотите проверить, что ваши типы совпадают...

7
ответ дан 24 November 2019 в 13:15
поделиться

Вы абсолютно уверены, что это не связано с данными, передаваемыми в представление? Вы каждый раз выполняете полную перестройку?

Эти ошибки обычно возникают из-за того, что частичное представление пытается использовать модель представления, переданную в ViewPage, когда модель представления, переданная в частичное представление, равна null. Я понимаю, что вы подразумеваете, что ошибка каким-то образом вызвана процессом сборки, но я не понимаю, как это возможно. Может ли быть так, что развернутый сайт использует другую базу данных, чем сайт, который вы запускаете на своей машине разработки, и могут ли данные (или отсутствие данных) в этой базе данных быть причиной проблемы?

.
3
ответ дан 24 November 2019 в 13:15
поделиться

Вызывает ли сборка какие-либо предупреждения или ошибки?

Правильно ли настроены ваши зависимости? Например. просмотров в зависимости от модели. Build выясняет, в каком порядке компилировать вещи, глядя на указанные зависимости. Например. если вы измените модель и представление будет скомпилировано до того, как модель попадет в затруднительное положение ...

Это исчезнет, ​​если вы не компилируете представления?

Также ваши представления наследуют System.Web.Mvc .ViewPage или System.Web.Mvc.ViewPage где T ваша модель?

2
ответ дан 24 November 2019 в 13:15
поделиться

Даже если типы совпадают, вы можете получить эту ошибку, когда в частичное представление передается значение null.

Вы можете исправить это, вызвав RenderPartial с пустым ViewDataDictionary следующим образом:

helper.RenderPartial("~/Views/Player/PlayerName.ascx", player, new ViewDataDictionary());

Для справки, я нашел это решение по адресу:
renderpartial с нулевой моделью передается неправильный тип

176
ответ дан 24 November 2019 в 13:15
поделиться

Перед назначением модели пользовательскому элементу управления из вашего представления создайте экземпляр этого конкретного объекта в конструкторе модели / объекта.

Пример:

 public class MainEntity
 {
    public SubEntity AssociatedEntity;

    public MainEntity()
    {
        // This is where the instantiation happen.
        AssociatedEntity = new SubEntity(); 
    }
 }

 public class SubEntity
 {
    public string property1;
 }

Ваша страница просмотра:

<%@ Page Title="" Language="C#" 
    MasterPageFile="~/Views/Shared/Site.Master" 
    Inherits="System.Web.Mvc.ViewPage<MyNamespace.Models.MainEntity>" %>
....
<%Html.RenderPartial("ucMyUserControl",Model.AssociatedEntity);
....

Ваш пользовательский элемент управления:

<%@ Control Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<MyNamespace.Models.SubEntity>" %>
....
<%Html.TextBoxFor(m=>m.Property1);
1
ответ дан 24 November 2019 в 13:15
поделиться
Другие вопросы по тегам:

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