MVC +验证属性是否足够?

时间:2011-01-13 22:24:59

标签: c# asp.net-mvc validation

我的ViewModel有验证属性,确保它不会是空的等等 - 这是否足够,或者我是否应该让我的代码合同也在ActionResult中?

示例:

// CreateCaseViewModel.cs

public class CreateCaseViewModel
{
    [Required]
    public string Topic { get; set; }

    [Required]
    public string Message { get; set; }
}

// CaseController.cs

[AuthWhere(AuthorizeRole.Developer)]
[HttpPost]
public ActionResult Create(CreateCaseViewModel model)
{
    if(!ModelState.IsValid)
    {
        // TODO: some cool stuff?
    }

    if (string.IsNullOrWhiteSpace(model.Message))
    {
        throw new ArgumentException("Message cannot be null or empty", model.Message);
    }

    if (string.IsNullOrWhiteSpace(model.Topic))
    {
        throw new ArgumentException("Topic cannot be null or empty", model.Topic);
    }

    var success = false;
    string message;

    var userId = new Guid(_membershipService.GetUserByUserName(User.Identity.Name).ProviderUserKey.ToString());

    if(userId == Guid.Empty)
    {
        throw new ArgumentException("UserId cannot be empty");
    }

    Case createCase = _caseService.CreateCase(model.Topic, model.Message);

    if(createCase == null)
    {
        throw new ArgumentException("Case cannot be null");
    }

    if(_caseService.AddCase(createCase, userId))
    {
        message = ControllerResources.CaseCreateFail;
    }
    else
    {
        success = true;
        message = ControllerResources.CaseCreateSuccess;
    }

    return Json(new
    {
        Success = success,
        Message = message,
        Partial = RenderPartialViewToString(ListView, GetCases)
    });
}

1 个答案:

答案 0 :(得分:1)

您的代码对我来说没有多大意义。

  • throw new ArgumentException将返回错误500(服务器错误)。您最好遵循REST原则并发回适当的错误代码(例如402错误请求以及错误的适当描述)或返回您的JSON成功= false和相应的错误消息。

  • 即使模型无效,您的代码似乎也会跟随。如果有效,叉必须包括 - >保存,否则将错误发送给客户。

  • 您似乎没有使用模型错误消息。它们非常有用,您可以在ModelState

  • 中找到它们

你解决了这些问题,我认为你的代码很好。