ASP.NET 核心 MVC 验证从文件读取的对象列表
ASP.NET Core MVC validate list of objects read from file
这是在 ASP.NET 核心 MVC 2.1 中。
所以我想做的是验证我从文件中读取的对象列表。
控制器成功读取文件并获取数据。我正在使用模型的 DTO 版本,听说这样做更好。
主要实体模型。
public class Person
{
[Key]
public int ID { get; set; }
[Required(ErrorMessage = "Osoba obavezno mora imati ime")]
public string FirstName { get; set; }
[Required(ErrorMessage = "Osoba obavezno mora imati prezime")]
public string LastName { get; set; }
[Required(ErrorMessage = "Grad obavezno mora imati ime")]
public string CityName { get; set; }
[Required(ErrorMessage = "Osoba obavezno mora imati postanski broj")]
[StringLength(5, MinimumLength = 5, ErrorMessage = "Poštanski broja mora sadrži točno 5 znamenki.")]
[RegularExpression("^[0-9]*$", ErrorMessage = "Poštanski broj smije sadržavati samo znamenke.")]
public string PostalCode { get; set; }
[Required(ErrorMessage = "Osoba obavezno mora imati mobilni broj")]
[StringLength(11, MinimumLength = 11, ErrorMessage = "Mobilni broja mora sadrži točno 11 znamenki.")]
[RegularExpression("^[0-9]*$", ErrorMessage = "Mobilni broj smije sadržavati samo znamenke.")]
public string MobileNumber { get; set; }
public string FullName => $"{FirstName} {LastName}";
}
DTO 实体模型。
public class PersonModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string CityName { get; set; }
public string PostalCode { get; set; }
public string MobileNumber { get; set; }
}
控制器中使用的方法。
public IActionResult LoadData()
{
PeopleService peopleService = new PeopleService();
var path = "pathToFile";
var resultData = peopleService.ReadCSVFile(path);
return PartialView("_LoadDataTable", resultData);
}
所以现在我的问题是验证文件数据的最佳方法是什么?
我尝试使用它有效的实体模型,但我似乎不是个好主意,因为您每次都必须调用数据库。我想我想先在客户端验证它。
另外,我需要取回错误消息,以便在视图中显示它。
您可以使用 TryValidateModel
来验证文件中的对象。 Document
您需要先将字符串转换为特定的对象,然后调用TryValidateModel
。
public IActionResult LoadData()
{
//read the content from file and convert it to Person
string readText = "";
FileStream fileStream = new FileStream(@"path", FileMode.Open);
using (StreamReader reader = new StreamReader(fileStream))
{
readText += reader.ReadToEnd();
}
var person = JsonConvert.DeserializeObject<Person>(readText);
var valid=TryValidateModel(person);
List<string> listError = new List<string>();
foreach(var value in ModelState.Values)
{
if (value.Errors.Count > 0)
listError.Add(value.Errors[0].ErrorMessage);
}
ViewBag.errors = listError;
//...
}
查看
@foreach(var e in (List<string>)ViewBag.errors)
{
<span class="text-danger">@e</span>
}
另一种方法是在视图中使用 ValidationSummary
。
@Html.ValidationSummary()
这是在 ASP.NET 核心 MVC 2.1 中。
所以我想做的是验证我从文件中读取的对象列表。
控制器成功读取文件并获取数据。我正在使用模型的 DTO 版本,听说这样做更好。
主要实体模型。
public class Person
{
[Key]
public int ID { get; set; }
[Required(ErrorMessage = "Osoba obavezno mora imati ime")]
public string FirstName { get; set; }
[Required(ErrorMessage = "Osoba obavezno mora imati prezime")]
public string LastName { get; set; }
[Required(ErrorMessage = "Grad obavezno mora imati ime")]
public string CityName { get; set; }
[Required(ErrorMessage = "Osoba obavezno mora imati postanski broj")]
[StringLength(5, MinimumLength = 5, ErrorMessage = "Poštanski broja mora sadrži točno 5 znamenki.")]
[RegularExpression("^[0-9]*$", ErrorMessage = "Poštanski broj smije sadržavati samo znamenke.")]
public string PostalCode { get; set; }
[Required(ErrorMessage = "Osoba obavezno mora imati mobilni broj")]
[StringLength(11, MinimumLength = 11, ErrorMessage = "Mobilni broja mora sadrži točno 11 znamenki.")]
[RegularExpression("^[0-9]*$", ErrorMessage = "Mobilni broj smije sadržavati samo znamenke.")]
public string MobileNumber { get; set; }
public string FullName => $"{FirstName} {LastName}";
}
DTO 实体模型。
public class PersonModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string CityName { get; set; }
public string PostalCode { get; set; }
public string MobileNumber { get; set; }
}
控制器中使用的方法。
public IActionResult LoadData()
{
PeopleService peopleService = new PeopleService();
var path = "pathToFile";
var resultData = peopleService.ReadCSVFile(path);
return PartialView("_LoadDataTable", resultData);
}
所以现在我的问题是验证文件数据的最佳方法是什么?
我尝试使用它有效的实体模型,但我似乎不是个好主意,因为您每次都必须调用数据库。我想我想先在客户端验证它。 另外,我需要取回错误消息,以便在视图中显示它。
您可以使用 TryValidateModel
来验证文件中的对象。 Document
您需要先将字符串转换为特定的对象,然后调用TryValidateModel
。
public IActionResult LoadData()
{
//read the content from file and convert it to Person
string readText = "";
FileStream fileStream = new FileStream(@"path", FileMode.Open);
using (StreamReader reader = new StreamReader(fileStream))
{
readText += reader.ReadToEnd();
}
var person = JsonConvert.DeserializeObject<Person>(readText);
var valid=TryValidateModel(person);
List<string> listError = new List<string>();
foreach(var value in ModelState.Values)
{
if (value.Errors.Count > 0)
listError.Add(value.Errors[0].ErrorMessage);
}
ViewBag.errors = listError;
//...
}
查看
@foreach(var e in (List<string>)ViewBag.errors)
{
<span class="text-danger">@e</span>
}
另一种方法是在视图中使用 ValidationSummary
。
@Html.ValidationSummary()