如何在TryUpdateModel()函数中生成错误?

本文关键字:错误 函数 TryUpdateModel | 更新日期: 2023-09-27 17:50:13

我想测试一个Try Catch的Catch分支,但我不明白如何在TryUpdateModel(ture)中生成错误?我正在使用VS 2013 Web Express。我尝试使用F10,它去捕捉,但没有产生错误。我希望能够看到和错误在我的返回视图页。

CheckoutController.cs

public ActionResult AddressAndPayment(FormCollection values)
{
    var facture = new Facture();
    TryUpdateModel(facture);        //I would like to generate an error here
    try
    {
        facture.DateFact = DateTime.Now; 
        //Process the order
        var cart = ShoppingCart.GetCart(this.HttpContext);
        cart.CreateOrder(facture);
        return RedirectToAction("Complete", new { id = facture.FactureId });
    }
    catch
    {
        //Invalid - redisplay with errors
        return View(facture);
    }
}

Facture.cs

 using System.Collections.Generic;
 using System.ComponentModel;
 using System.ComponentModel.DataAnnotations;
 using System.Web.Mvc;
 namespace Tp1WebStore3.Models
 {
    [Bind(Exclude = "FactureId")]
    public partial class Facture
    {
        [ScaffoldColumn(false)]
        public int FactureId { get; set; }
        [ScaffoldColumn(false)]
        public System.DateTime DateFact { get; set; }
        [Required(ErrorMessage = "Vous devez saisir votre Nom")]
        public string NomFact { get; set; }
        [Required(ErrorMessage = "Vous devez saisir votre Prenom")]
        public string PrenomFact { get; set; }
        [Required(ErrorMessage = "Vous devez saisir une adresse")]
        public string AdresseFact { get; set; }
        [Required(ErrorMessage = "Vous devez saisir une ville")]
        public string VilleFact { get; set; }
        [Required(ErrorMessage = "Vous devez saisir un code postal")]
        public string CodePostalFact { get; set; }
        [Required(ErrorMessage = "Vous devez saisir une adresse courriel")]
        [DisplayName("CourrielFact")]
        [RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+'.[A-Za-z]{2,4}",
        ErrorMessage = "Adresse courriel invalide.")]
        [DataType(DataType.EmailAddress)]
        public string CourrielFact { get; set; }
        public decimal TotalFact { get; set; }
        public List<Facture> Factures { get; set; }
    }
}

如何在TryUpdateModel()函数中生成错误?

TryXXX模式返回bool(成功则返回true,失败则返回false)

所以测试你的模型更新是否成功,你可以执行

if (this.TryUpdateModel(something))
{
    // success
}
else 
{
    // handle failure
}

使用Exception s的等效值为

try
{
    this.UpdateModel(something);
}
catch(SomeException)
{
    // handle failure
}

但是抛出异常是很昂贵的所以这被认为是不好的做法特别是当你有一个可用的TryXXX