在 ASP.NET Core 中通过单击按钮更改 属性 值
Changing a property value from a button click in ASP.NET Core
我想通过单击 ASP.NET Core Razor 页面中的按钮更改服务器中 属性 的值。
我在 class 中有这个 属性:
public class MyClassViewModel
{
public string ButtonColor { get; set; }
public MyClassViewModel()
{
ButtonColor = new string("#007BFF");
}
}
在我的 Razor 页面中,我正在检查这样的空引用异常:
@{
MyClassViewModel color = new MyClassViewModel();
if (string.IsNullOrEmpty(color.ButtonColor))
{
color.ButtonColor = "#000000";
}
}
我有两个锚将用户选择的颜色保存到隐藏的输入。这些标签允许用户选择他们想要的颜色。是这样的:
<li><input type="text" id="selected-theme" value="@Model.ButtonColor" hidden readonly/></li>
<li><a style="color:rgb(7,100,199)" onclick="apply_theme('#007BFF')"><i class="fas fa-square"></i></a></li>
<li><a style="color:rgb(188,126,0)" onclick="apply_theme('#BC7E00')"><i class="fas fa-square"></i></a></li>
这是包含 'apply_theme()' 函数的脚本:
function apply_theme(color) {
document.getElementById('selected-theme').value = color;
}
这里的问题是我得到:
'System.NullReferenceException: 'Object reference not set to an instance of an object.''
这一行的异常:
<li><input type="text" id="selected-theme" value="@Model.ButtonColor" hidden readonly/></li>
编译器抱怨我在获取值之前没有实例化对象,但我想我已经在构造函数中这样做了。我错过了什么,或者我怎么弄错了?
我希望对这种情况有所了解。
这是一个简单的工作演示。我用的是局部视图。
索引视图:
<li id="theme"></li>
<li><a style="color:rgb(7,100,199)" onclick="apply_theme('#007BFF')"><i class="fas fa-square">theme1</i></a></li>
<li><a style="color:rgb(188,126,0)" onclick="apply_theme('#BC7E00')"><i class="fas fa-square">theme2</i></a></li>
@section scripts{
<script>
$(function () {
$.ajax({
type: "get",
url: "/Home/SetColor",
success: function (result) {
$("#theme").html(result);
}
})
})
function apply_theme(color) {
$.ajax({
type: "get",
url: "/Home/SetColor",
data: { color: color },
success: function (result) {
$("#theme").html(result);
}
})
}
</script>
}
设置颜色:
public IActionResult SetColor(string color)
{
MyClassViewModel myClassViewModel = new MyClassViewModel();
if (!string.IsNullOrEmpty(color))
{
myClassViewModel.ButtonColor = color;
}
return PartialView(myClassViewModel);
}
局部视图:
@model MyClassViewModel
<input type="text" id="selected-theme" value="@Model.ButtonColor" readonly />
结果:
我想通过单击 ASP.NET Core Razor 页面中的按钮更改服务器中 属性 的值。
我在 class 中有这个 属性:
public class MyClassViewModel
{
public string ButtonColor { get; set; }
public MyClassViewModel()
{
ButtonColor = new string("#007BFF");
}
}
在我的 Razor 页面中,我正在检查这样的空引用异常:
@{ MyClassViewModel color = new MyClassViewModel(); if (string.IsNullOrEmpty(color.ButtonColor)) { color.ButtonColor = "#000000"; } }
我有两个锚将用户选择的颜色保存到隐藏的输入。这些标签允许用户选择他们想要的颜色。是这样的:
<li><input type="text" id="selected-theme" value="@Model.ButtonColor" hidden readonly/></li>
<li><a style="color:rgb(7,100,199)" onclick="apply_theme('#007BFF')"><i class="fas fa-square"></i></a></li>
<li><a style="color:rgb(188,126,0)" onclick="apply_theme('#BC7E00')"><i class="fas fa-square"></i></a></li>
这是包含 'apply_theme()' 函数的脚本:
function apply_theme(color) {
document.getElementById('selected-theme').value = color;
}
这里的问题是我得到:
'System.NullReferenceException: 'Object reference not set to an instance of an object.''
这一行的异常:
<li><input type="text" id="selected-theme" value="@Model.ButtonColor" hidden readonly/></li>
编译器抱怨我在获取值之前没有实例化对象,但我想我已经在构造函数中这样做了。我错过了什么,或者我怎么弄错了?
我希望对这种情况有所了解。
这是一个简单的工作演示。我用的是局部视图。
索引视图:
<li id="theme"></li>
<li><a style="color:rgb(7,100,199)" onclick="apply_theme('#007BFF')"><i class="fas fa-square">theme1</i></a></li>
<li><a style="color:rgb(188,126,0)" onclick="apply_theme('#BC7E00')"><i class="fas fa-square">theme2</i></a></li>
@section scripts{
<script>
$(function () {
$.ajax({
type: "get",
url: "/Home/SetColor",
success: function (result) {
$("#theme").html(result);
}
})
})
function apply_theme(color) {
$.ajax({
type: "get",
url: "/Home/SetColor",
data: { color: color },
success: function (result) {
$("#theme").html(result);
}
})
}
</script>
}
设置颜色:
public IActionResult SetColor(string color)
{
MyClassViewModel myClassViewModel = new MyClassViewModel();
if (!string.IsNullOrEmpty(color))
{
myClassViewModel.ButtonColor = color;
}
return PartialView(myClassViewModel);
}
局部视图:
@model MyClassViewModel
<input type="text" id="selected-theme" value="@Model.ButtonColor" readonly />
结果: