簡體   English   中英

ASP.NET MVC C#教程:如何在用戶輸入進入數據庫之前對其進行編輯/檢查?

[英]ASP.NET MVC C# tutorial : how do I edit/check user input before it goes in the database?

我一直在研究旨在教授C#ASP.NET Core MVC( https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/crud )的用法的官方Microsoft教程。 我有使用C ++和Java之類的OOP語言的經驗,但是我對C#和此特定框架都是陌生的。

本教程本身運行良好。 我有一個Web應用程序,可以對學生執行基本的CRUD操作。 對我來說,重要的是要知道一個學生有一個LastNameFirstName和一個唯一的,自動生成的ID ,該ID充當其在數據庫中的主鍵。

我想添加一張支票以確保學生的姓氏和名字的組合唯一。 我還希望能夠通過刪除前導空格等來清理輸入。我能夠通過在Create方法中Create新數據來做到這一點,但是我不知道如何將其添加到推薦的Edit控制器中的方法(為了節省空間,我從下面整理了我所知道的不重要的內容):

[HttpPost, ActionName("Edit")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> EditPost(int? id) 
{
    var studentToUpdate = await _context.Students.SingleOrDefaultAsync(s => s.ID == id);

    if (await TryUpdateModelAsync<Student>(
        studentToUpdate,
        "",
        s => s.FirstMidName, s => s.LastName))
    {
        try
        {
            await _context.SaveChangesAsync();
            return RedirectToAction(nameof(Index));
        }
    }

    return View(studentToUpdate);
}

問題:在將用戶數據放入數據庫之前,如何檢查和處理用戶數據?

根據我的能力, TryUpdateModelAsync函數以某種方式獲取用戶提交的信息並使用它來更新模型。 但是,文檔沒有提供任何線索讓我知道如何進行干預並成為該過程的積極組成部分。 我想在允許更新之前親自檢查/操作數據,但是我不確定如何訪問它。 它在物體上嗎? 是否有可以讓我對其進行操作的功能? 經過一整天的谷歌搜索,我還沒有找到它。 我敢肯定這是有可能的,因為將用戶未處理的未經消毒的數據放入數據庫中似乎不是一個好習慣。 (至少那是我從Bobby Tables聽到的)

視圖中的輸入示例,以幫助您:

<div class="form-group">
    <label asp-for="FirstName" class="control-label"></label>
    <input asp-for="FirstName" class="form-control" />
    <span asp-validation-for="FirstName" class="text-danger"></span>
</div>

我希望我提供了足夠的信息。 如果我有任何重要的背景要忽略,請告訴我。

學生數據位於“ studentToUpdate”中。 您可以像這樣讀寫它。

studentToUpdate.firstName = "anything"
var fullName = studentToUpdate.firstName + " " + studentToUpdate.lastName
if (studentToUpdate.lastName == "anything")
{
    //Do anything here
}

請注意,似乎您正在讀取數據庫並再次保存數據,而沒有從表單中發布任何內容。 您的控制器混合了HTTP GET和HTTP POST。 請看一下本教程:

https://docs.microsoft.com/zh-cn/aspnet/core/data/ef-mvc/crud

另外,為了驗證輸入數據,建議您在模型驗證屬性上使用。 請看一下本教程:

https://docs.microsoft.com/zh-cn/aspnet/core/mvc/models/validation

關於驗證部分 ,您應該使用模型驗證屬性。 在您的特定示例中,您必須檢查DB是否已存在您的學生:

在您的ViewModel中:

@using System.Web.Mvc

//your model properties

[Remote("CheckStudentNameAlreadyExists", "Validation", ErrorMessage = "This student already exists")]
public string StudentName {get; set;}

然后,只需在您的ValidationController編寫一個方法,即可按照您自己的業務規則檢查學生是否已經存在

public JsonResult CheckStudentNameAlreadyExists(string studentName)
{
    bool isNameAvailable = /* method checking your DB */
    return Json(isNameAvailable , JsonRequestBehavior.AllowGet);
}

關於修改部分 ,您的EditPost操作應將viewModel作為參數,因此您可以“即時”修改數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM