У меня проблема с веб-страницей, которая отображается с использованием бритвенного движка ASP.NET MVC (5.2.3), но также использует AngularJS (1.7.4).Проблема состоит в том, что то, что должно отображаться как простой текст, оценивается AngularJS.
Так, например, в нашей модели у нас есть свойство Name
, которое, когда значение, например, {{1 + 1}}
отображается как 2
, т.е. вычисляется выражение AngularJS:
(отредактированная) страница cshtml имеет следующие строки:
@model Models.SomeViewModel
<div ng-controller="RuleController" ng-form="ruleForm" novalidate>
<!-- stuff here -->
<div class="panel">
<div class="panel-heading">
<!-- stuff here -->
</div>
<div class="panel-body ng-cloak">
<!-- stuff here -->
<div class="row form-group">
@Html.LabelFor(model => model.Name, new HtmlAttributeBuilder().WithCssClass("col-sm-1 control-label"))
<div class="col-xs-12 col-sm-10 col-md-11 pull-right">
@Html.TextBoxFor(model => model.Name, new HtmlAttributeBuilder().WithCssClass("form-control form-group-margin").WithNgModel("viewModel.name").WithNgChange("updateName(viewModel.name)").WithRequired())
<span id="name-error" class="text-danger error-text" ng-model="errors.viewModel.Name">{{errors.viewModel.Name}}</span>
</div>
</div>
Класс C #, на который ссылаются в представлении Razor - HtmlBuilder
- наследуется от `Dictionary '
[Serializable]
public class HtmlAttributeBuilder : Dictionary<string, object>
{
public HtmlAttributeBuilder WithCssClass(string cssClassName)
{
this.Add("class", cssClassName);
return this;
}
public HtmlAttributeBuilder WithNgModel(string property)
{
this.Add("ng-model", property);
return this;
}
public HtmlAttributeBuilder WithNgChange(string val)
{
this.Add("ng-change", val);
return this;
}
}
Интересно, когда я смотрю на значение $scope.viewModel.name
вRuleController
Я вижу, что это {{1 + 1}}
и , а не 2.
Я пытался использовать ng-non-bindable
, и хотя он препятствует вычислению выражения Angular, он также предотвращает постоянное обновлениезначение при удалении двусторонней привязки.