TL; DR: Попробуйте использовать Html.Partial
вместо Renderpage
Я получал Object reference not set to an instance of an object
, когда пытался сделать вид в представлении, отправив ему модель, например это:
@{
MyEntity M = new MyEntity();
}
@RenderPage("_MyOtherView.cshtml", M); // error in _MyOtherView, the Model was Null
Отладка показала, что модель была Null внутри MyOtherView. Пока я не сменил его на:
@{
MyEntity M = new MyEntity();
}
@Html.Partial("_MyOtherView.cshtml", M);
И это сработало.
Кроме того, причина, по которой я не имел Html.Partial
для начала, заключалась в том, что Visual Studio иногда выдает ошибки, (f9), если он находится внутри другого построенного цикла foreach
, хотя это не ошибка:
@inherits System.Web.Mvc.WebViewPage
@{
ViewBag.Title = "Entity Index";
List<MyEntity> MyEntities = new List<MyEntity>();
MyEntities.Add(new MyEntity());
MyEntities.Add(new MyEntity());
MyEntities.Add(new MyEntity());
}
<div>
@{
foreach(var M in MyEntities)
{
// Squiggly lines below. Hovering says: cannot convert method group 'partial' to non-delegate type Object, did you intend to envoke the Method?
@Html.Partial("MyOtherView.cshtml");
}
}
</div>
Но я смог запустить приложение без проблем с этим " ошибка". Я смог избавиться от ошибки, изменив структуру цикла foreach
, чтобы выглядеть так:
@foreach(var M in MyEntities){
...
}
Хотя я чувствую, что это потому, что Visual Studio неправильно интерпретировала амперсанды и скобки .
Вы можете использовать следующее regex глобально:
\[(.*?)\]
Объяснение:
\[
: [
является метасимволом, и его необходимо экранировать, если вы хотите сопоставить это буквально. (.*?)
: совпадение со всем нежелательным способом и захват его. \]
: ]
является метасимволом и требует чтобы ускользнуть, если вы хотите совместить это буквально. (?<=\().*?(?=\))
работает хорошо в соответствии с приведенным выше объяснением. Вот пример Python:
import re
str = "Pagination.go('formPagination_bottom',2,'Page',true,'1',null,'2013')"
re.search('(?<=\().*?(?=\))', str).group()
"'formPagination_bottom',2,'Page',true,'1',null,'2013'"
[]
), а не круглых скобок.
– Alan Moore
24 April 2015 в 01:32
\[([^\[\]]*)\]
, чтобы получить контент в самой внутренней скобке. Если вы посмотрите на lfjlksd [ded[ee]22]
, то \[([^]]+)\]
вы получите [ded[ee]
, в то время как предлагаемое выражение вернет [ee]
. тестируется в ссылке
– TMC
2 April 2014 в 15:45
Этот код будет извлекать содержимое между квадратными скобками и круглыми скобками
(?:(?<=\().+?(?=\))|(?<=\[).+?(?=\]))
(?: non capturing group
(?<=\().+?(?=\)) positive lookbehind and lookahead to extract the text between parentheses
| or
(?<=\[).+?(?=\]) positive lookbehind and lookahead to extract the text between square brackets
(?<=\[).+?(?=\])
будет захватывать контент без скобок
(? & lt; = [) - положительный lookbehind для [
. *? - нежелательное соответствие для содержимого
(? =]) - положительный результат для]
EDIT: для вложенных скобок должно выполняться следующее регулярное выражение:
(\[(?:\[??[^\[]*?\]))
.
...
– patrick
7 December 2015 в 03:54
([[][a-z \s]+[]])
Выше должно работать, учитывая следующее объяснение
A-Z
следует добавить к шаблону: ([[][a-zA-Z \s]+[]])
; Я думаю, что это хороший способ, в то время как \
в шаблонах регулярных выражений, которые определяют в строковых меток (& quot; и '), и смешивание новичков с помощью обратного слэша в & quot; или "обычаев!
– MohaMad
1 March 2017 в 11:46
Могут ли скобки быть вложенными?
Если нет: \[([^]]+)\]
соответствует одному элементу, включая квадратные скобки. Backreference \1
будет содержать элемент, который будет соответствовать. Если ваш regex-аромат поддерживает lookaround, используйте
(?<=\[)[^]]+(?=\])
Это будет соответствовать только элементам внутри скобок.
/g
в JavaScript).
– Tim Pietzcker
8 December 2017 в 16:30
[^]]
, быстрее, чем не жадный (?
), а также работает с ароматами регулярных выражений, которые не поддерживают не жадные. Однако не жадный выглядит лучше. – Ipsquiggle 8 March 2010 в 18:24[
]
из вывода (результата)? – Mickey Tin 28 April 2013 в 23:46