问题描述
代码背景:
我在 Asp.Net Core 中有一个模型类,如下所示:
INSERT INTO payment (Id_student,Class,Status)
SELECT Id_student,"not_complete" AS Status
FROM student
WHERE Class = "A";
现在,如果在 namespace urlShortner.Models
{
public class urlData
{
public string longUrl {get; set;}
public string shortUrl {get; set;}
public int hitTimes {get; set;} = 0;
public string creationTimeStamp {get; set;}
}
}
类中使用 Auto-Implemented 属性直接存储 ViewModel
就可以了,如下:
剃刀页面:
POST request fields
视图模型:
<input asp-for="urlDataObj.longUrl">
.
.
.
<p style="color: white;">
@ViewData["lo"]
</p>
如上所示,我有一个 Auto-Implemented 属性,它由 [BindProperty]
public urlShortner.Models.urlData urlDataObj {get; set;}
public void OnPost()
{
ViewData["lo"] = urlDataObj.longUrl;
}
属性和 [BindProperty]
POST 数据直接装饰到其中一个字段,比它晚使用 Razor Page
在 page
上可见。
我试图避免这种情况,因为这是一个安全问题,用户可以轻松地将 ViewData
上的 form
操作为另一个字段的 page
数据.
我更改了以下代码:
Razor 页面(已更改):
POST
ViewModel(已更改):
<input asp-for="longUrl">
.
.
.
<p style="color: white;">
@ViewData["lo"]
</p>
现在,如果我使用 [BindProperty]
public string longUrl {get; set;}
public urlShortner.Models.urlData urlDataObj {get; set;}
public void OnPost()
{
ViewData["lo"] = longUrl; // POST data is OK!
urlDataObj.longUrl = longUrl; // Null reference exception will occurs!
}
类型的 Object
而不是像这样的自动实现属性:
urlShortner.Models.urlData
问题就解决了!
问题:
我可以简单地认为这个自动实现的属性有时会在程序编译后创建烘焙场,但不知道何时、如何等
另外,为什么用 public urlShortner.Models.urlData urlDataObj = new urlShortner.Models.urlData();
数据填充属性可以,但用变量赋值不行?
请解释清楚(生命周期)。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)