[英]Default value for an input field on EF Core
我正在嘗試使用 EF Core MVC 應用程序,但遇到了一個障礙:
我有一個 model ,它的 RenewDate 如下(摘錄):
[Required]
[Display(Name = "Status")]
public char STATUS { get; set; }
[Required]
[Display(Name = "Licence Renew Date")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime RENEWDATE { get; set; }
我還有一個 LicenceViewModel 專門用於將 STATUS (char(1)) 轉換為字符串,如下所示:
public class LicencaViewModel
{
public Licence Licence { get; set; }
public string Status
{
get
{
return Licence.STATUS switch
{
'P' => "Pending",
'I' => "Inactive",
'B' => "Blocked",
'A' => "Active",
_ => "Error"
};
}
set
{
Licence.STATUS = value switch
{
"Pending" => 'P',
"Inactive" => 'I',
"Blocked" => 'B',
"Active" => 'A',
_ => 'P'
};
}
}
}
最后是 Create.cshtml 的相關行:
<div class="form-group">
<label asp-for="Licence.RENEWDATE" class="control-label"></label>
<input asp-for="@DateTime.Now" readonly type="date" class="form-control" />
<span asp-validation-for="Licence.RENEWDATE" class="text-danger"></span>
</div>
所以,基本上我在這里想要實現的是一個只讀字段,它只顯示客戶許可證的自動設置更新日期。 現在的方式只是顯示當前日期,但我不能使用@DateTime.Now.AddYears(1)
因為我得到Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions
。
我嘗試在 controller 上使用 ViewBag 和ViewBag.AutoRenewDate = DateTime.Now.AddYears(1)
,以及在視圖本身上使用 ViewData["AutoRenewDate"]。 我也試過添加public DateTime RENEWDATE{ get { return DateTime.Now.AddYears(1); } }
public DateTime RENEWDATE{ get { return DateTime.Now.AddYears(1); } }
直接到viewModel,也無濟於事。
我已經看到很多使用純 Html 從 ViewBags 和 ViewModels 獲取日期的答案,但我想知道是否有辦法使用 razor 頁面模板來做到這一點......
編輯:我忘了明確指出這是“創建”表單頁面,所以我沒有填寫 model 來設置 RENEWDATE。 我需要一個只讀的表單字段,它會自動顯示今天加上一年。
我通過簡單地忽略 controller 腳本中的任何 POST 方法調用 viewmodel 並覆蓋我需要在 POST 方法上設置為默認值的屬性來解決這個問題,如下所示:
[HttpPost]
[ValidateAntiForgeryToken]
[Authorize(Roles = "Admin, manager")]
public async Task<IActionResult> Create(LicencaViewModel licencaViewModel)
{
if (!ModelState.IsValid) return View(licencaViewModel);
licencaViewModel.Licence.STATUS = 'P'; //This overrides whatever licencaViewModel currently has and sets it to the expected value.
string serial = await _licencaViewModelService.InsertAsync(licencaViewModel.Licenca);
return RedirectToAction("Details", new { id = serial });
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.