用MVC显示表单错误
本文关键字:错误 表单 显示 MVC | 更新日期: 2023-09-27 18:02:11
我有一个表单,用于上传图像文件并检查它们是否为jpg:
// CarAdmin/Index.cshtml
@model MySite.Models.Car
@using (Html.BeginForm("CarImageUpload", "Car", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<input type="file" name="file" />
<input type="text" name="imageInfo" />
<input type="submit" value="OK" />
}
<form action="CarAJAX" method="post" name="CarAdminForm">
<input name="Make" value="@Model.Name/>
<input type="submit" value="Update Car Info">
</form>
// CarController.cs
[HttpPost]
public ActionResult CarImageUpload(HttpPostedFileBase file)
{
ValidateImageFile V = new ValidateImageFile(file); // checks that the file is a jpg
List<String> Validity = V.Issues;
if (Validity.Count == 0)
{
file.SaveAs(V.FilePath);
}
else
{
Response.Write(String.Join("<br>", Validity.ToArray()); // THIS IS PROBLY WRONG
}
RedirectToAction("CarAdmin");
}
public ActionResult CarAdmin()
{
return View("CarAdmin/Index.cshtml");
}
如果ValidateImageFile类发现一个问题,我想:
- 给出有问题的输入一个类
- 在页面上显示消息
然而,我不确定如何从控制器和我的响应操作表单。Write不发送任何东西(我可以看到-但我不确定如何访问)。
关于如何做到这一点,我有一些想法,但它们看起来像是胶带工作,而不是最佳实践。
用户Darian Dimitrov回答了一个与你的问题非常相似的问题,他的解决方案应该会给你指明正确的方向。
是否有一种方法来验证传入httppostdfilebase文件在MVC 2?
另一个很好的资源是:
http://cpratt.co/file-uploads-in-asp-net-mvc-with-view-models/你的视图可能看起来像:
// CarAdmin/Index.cshtml
@model MySite.Models.CarUploadViewModel
@using (Html.BeginForm("CarImageUpload", "Car", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<input type="file" name="ImageUpload" />
<input type="text" name="ImageInfo" />
<input type="submit" value="OK" />
}
<form action="CarAJAX" method="post" name="CarAdminForm">
<input name="Make" value="@Model.Name/>
<input type="submit" value="Update Car Info">
</form>
你的模型可能看起来像:
public class CarUploadViewModel
{
[Required]
public string ImageInfo{ get; set; }
[DataType(DataType.Upload)]
HttpPostedFileBase ImageUpload { get; set; }
}
你的控制器可能看起来像:
[HttpPost]
public ActionResult CarImageUpload(CarUploadViewModel model)
{
ValidateImageFile validity = new ValidateImageFile(model.ImageUpload); // checks that the file is a jpg
List<String> issues = validity.Issues;
if (issues.Count > 0)
{
// TODO: Add more descriptive issue messages
ModelState.AddModelError("ImageUpload", "There was an issue.");
}
if(ModelState.IsValid)
{
model.ImageUpload.SaveAs(V.FilePath);
RedirectToAction("CarAdmin");
}
return View(model);
}
基本上,你想要做的是为你的表单创建一个模型,检查它的有效性,如果它无效,返回带有验证错误的模型给视图。
要将自定义错误添加到模型中,您可以使用:
ModelState.AddModelError("MyField", "Custom error message here");
并输出到视图,如:
@Html.ValidationMessage("MyField");