C# 与ng模型绑定时防止AngularJS表达式求值的问题
我对使用ASP.NET MVC(5.2.3)razor引擎呈现的网页有一个问题,但它也使用AngularJS(1.7.4)。问题是应该呈现为纯文本的内容正在由AngularJS进行评估 因此,例如,在我们的模型中,我们有一个属性C# 与ng模型绑定时防止AngularJS表达式求值的问题,c#,angularjs,asp.net-mvc,xss,C#,Angularjs,Asp.net Mvc,Xss,我对使用ASP.NET MVC(5.2.3)razor引擎呈现的网页有一个问题,但它也使用AngularJS(1.7.4)。问题是应该呈现为纯文本的内容正在由AngularJS进行评估 因此,例如,在我们的模型中,我们有一个属性Name,例如,当值为{{1+1}}时,显示为2,即正在计算AngularJS表达式: (修订的)cshtml页面如下所示: @model Models.SomeViewModel <div ng-controller="RuleController" ng-f
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>
有趣的是,当我查看RuleController
中$scope.viewModel.name
的值时,我可以看到它是{{1+1}
而不是2
我尝试过使用
ng non-bindable
,虽然它阻止了对角度表达式的求值,但也阻止了值的持久更新,因为它删除了双向绑定。您尝试过这个指令吗
注意,这可能会出现在评论中,但我没有足够的声誉。AngularJS文档特别提到不要混合服务器和客户端模板,但我猜您已经将Angular添加到现有的应用程序中…@Erlend您能告诉我AngularJS文档中的相关部分吗?那真的很有帮助。我不知道为什么会像许多年前那样,决定混合客户端和服务器端渲染。请参阅“删除沙盒”下的“中途”:@Erlend谢谢。谢谢。我还尝试使用
ng non-bindable
。请看我更新的问题。
[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;
}
}