Javascript、Razor、Asp.Net核心:未定义View.Element
在我的Asp.Net核心视图的Javascript中,MVC是“View.BestritteneRunden”未定义。在我将它从Asp.NETMVC迁移到Asp.NETCoreMVC之前,它运行良好。我通过研究发现的东西扼杀了我的UI元素。应用程序应该在计时器过期后计算视图上的值。有人能帮我吗 以下是我的观点中的一个片段:Javascript、Razor、Asp.Net核心:未定义View.Element,javascript,asp.net-core,razor,Javascript,Asp.net Core,Razor,在我的Asp.Net核心视图的Javascript中,MVC是“View.BestritteneRunden”未定义。在我将它从Asp.NETMVC迁移到Asp.NETCoreMVC之前,它运行良好。我通过研究发现的东西扼杀了我的UI元素。应用程序应该在计时器过期后计算视图上的值。有人能帮我吗 以下是我的观点中的一个片段: @using PlaudertischSoftware.Models; @using DevExtreme.AspNet.Mvc; @using DevExpress.Web
@using PlaudertischSoftware.Models;
@using DevExtreme.AspNet.Mvc;
@using DevExpress.Web;
@using DevExtreme.AspNet.Data;
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
@model PlauderViewModel
@section Styles {
@*<link href="@Url.Content("~/Content/design.css")" rel="stylesheet" type="text/css" />*@
<link href="~/css/design.css" rel="stylesheet" />
}
@{
ViewBag.Title = "SpielView";
}
@using (Html.BeginForm("SpielView", "Plauder", FormMethod.Post))
{
<body style="z-index:-5">
<div class="progress-info">
<br />
<span>Runde: <input id="txtRunde" name="BestritteneRunden" type="text" value="@Model.BestritteneRunden" style="width: 15px; border-width: 0px; background:none" />von 10</span>
<br />
Übrige Zeit 00:00:<span id="timer">10</span>
</div>
<div id="progress-info">
@(Html.DevExtreme().ProgressBar()
.ID("progressBarStatus")
.Min(0)
.Max(100)
.Width("100%")
.Height(50)
.StatusFormat(new JS("progressBar_statusFormat"))
.OnComplete("progressBar_onComplete")
.OnValueChanged("progressBar_valueChanged")
)
<div class="form" style="margin-top:-25px">
@(Html.DevExtreme().Button()
.ID("progress-button")
.Text("Starten")
.Width(120)
.OnClick("button_onClick")
)
</div>
</div>
</body>
<script>
var drehen = @Model.Drehrichtung;
var seconds = 10,
inProgress = false;
window.intervalId = window.intervalId || null;
function timer(){
seconds--;
setCurrentStatus();
if (seconds === 0) {
clearInterval(intervalId);
seconds = 10;
return;
}
}
function setCurrentStatus() {
$("#progressBarStatus").dxProgressBar("option", "value", (10 - seconds) * 10);
$("#timer").text(("0" + seconds).slice(-2));
}
function progressBar_statusFormat(value) {
return;
};
function progressBar_onComplete(e) {
inProgress = false;
$("#progress-button").dxButton("option", "text", "Stoppen");
e.element.removeClass("complete");
//Daten zum Controller senden und auswerten
$.ajax({
type: "POST",
url: "TimerStopped",
dataType: "json",
data: $('form').serialize(),
success: function (view) {
$("#txtRunde").attr("value", view.BestritteneRunden);
if (view.BestritteneRunden < 11) {
button_onClick(e);
}
else {
location.replace("AuswertungsView");
}
$("#slider-value").dxNumberBox("instance").option("value", 0);},
error: function (result) {
alert(result.text);
}
});
};
function button_onClick(e) {
clearInterval(intervalId);
$("#progressBarStatus").removeClass("complete");
if (inProgress) {
e.component.option("text", "Fortsetzen");
clearInterval(intervalId);
} else {
e.component.option("text", "Stoppen");
setCurrentStatus();
intervalId = setInterval(timer, 1000);
}
inProgress = !inProgress;
};
</script>
}
@使用PlaudertischSoftware.Models;
@使用DevExtreme.AspNet.Mvc;
@使用DevExpress.Web;
@使用DevExtreme.AspNet.Data;
@模型PlauderViewModel
@剖面样式{
@**@
}
@{
ViewBag.Title=“SpielView”;
}
@使用(Html.BeginForm(“SpielView”、“Plauder”、FormMethod.Post))
{
伦德:冯10
Übrige Zeit 00:00:10
@(Html.DevExtreme().ProgressBar())
.ID(“progressBarStatus”)
.Min(0)
.最大值(100)
.宽度(“100%”)
.身高(50)
.StatusFormat(新JS(“progressBar\U StatusFormat”))
.OnComplete(“progressBar\u OnComplete”)
.OnValueChanged(“progressBar\u valueChanged”)
)
@(Html.DevExtreme().Button())
.ID(“进度按钮”)
.文本(“Starten”)
.宽度(120)
.OnClick(“按钮”\u OnClick”)
)
var drehen=@Model.Drehrichtung;
var秒=10,
inProgress=假;
window.intervalId=window.intervalId | | null;
函数计时器(){
秒--;
setCurrentStatus();
如果(秒===0){
clearInterval(intervalId);
秒=10;
返回;
}
}
函数setCurrentStatus(){
$(“#progressBarStatus”).dxProgressBar(“选项”,“值”,“10秒)*10);
$(“#计时器”).text(((“0”+秒).slice(-2));
}
函数progressBar\u状态格式(值){
返回;
};
功能进度条(未完成)(e){
inProgress=假;
$(“#进度按钮”).dxButton(“选项”、“文本”、“停止”);
e、 元素。removeClass(“完整”);
//Daten zum控制器senden和auswerten
$.ajax({
类型:“POST”,
网址:“TimerStopped”,
数据类型:“json”,
数据:$('form')。序列化(),
成功:功能(视图){
$(“#txtRunde”).attr(“value”,view.BestritteneRunden);
如果(view.BestritteneRunden<11){
按钮点击(e);
}
否则{
位置。更换(“AuswertungsView”);
}
$(“#滑块值”).dxNumberBox(“实例”).option(“值”,0);},
错误:函数(结果){
警报(result.text);
}
});
};
功能按钮点击(e){
clearInterval(intervalId);
$(“#progressBarStatus”).removeClass(“完成”);
如果(正在进行){
e、 选项(“文本”、“Fortsetzen”);
clearInterval(intervalId);
}否则{
e、 组件。选项(“文本”、“停止”);
setCurrentStatus();
intervalId=设置间隔(计时器,1000);
}
inProgress=!inProgress;
};
}
在我的Asp.Net核心视图的Javascript中,MVC是“View.BestritteneRunden”未定义
该问题可能是由于对所有JSON属性名称使用camel大小写造成的
如果检查返回的数据视图
,它可能看起来像bestritteneRunden:10
,而不是bestritteneRunden:10
要修复它,可以使用view.bestritteneRunden
修改js代码
$("#txtRunde").attr("value", view.bestritteneRunden);
或者将PropertyNamingPolicy
设置为null
services.AddControllersWithViews()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.PropertyNamingPolicy = null;
});
能否显示API代码(“TimerStopped”)?将PropertyNamegPolicy设置为Null修复了它。非常感谢你!