Проблема, препятствующая оценке выражения AngularJS при связывании с ng-моделью - PullRequest
0 голосов
/ 12 октября 2018

У меня проблема с веб-страницей, которая отображается с использованием бритвенного движка ASP.NET MVC (5.2.3), но также использует AngularJS (1.7.4).Проблема состоит в том, что то, что должно отображаться как простой текст, оценивается AngularJS.

Так, например, в нашей модели у нас есть свойство Name, которое, когда значение, например, {{1 + 1}}отображается как 2, т.е. вычисляется выражение AngularJS:

enter image description here

(отредактированная) страница 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, он также предотвращает постоянное обновлениезначение при удалении двусторонней привязки.

1 Ответ

0 голосов
/ 12 октября 2018

Вы пробовали эту директиву?

https://docs.angularjs.org/api/ng/directive/ngNonBindable

Обратите внимание, это, вероятно, должно быть в комментариях, но у меня недостаточно репутации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...