1

モデルになりたい状況があり、2 つのフィールドのうちの 1 つだけが必要でした。

    public int AutoId { get; set; }
    public virtual Auto Auto { get; set; }

    [StringLength(17, MinimumLength = 17)]
    [NotMapped]
    public String VIN { get; set; }

誰かがビンに入った場合、AutoID のコントローラーで変換されます。コントローラーをこのようなものに強制する方法は?

         public ActionResult Create(Ogloszenie ogloszenie) {
        information.AutoId = 1;         
        if (ModelState.IsValid)
        {
        ...
        }..
4

2 に答える 2

1

いずれかの必須フィールドの存在をチェックするカスタム検証属性を実装できます。

カスタム検証属性の詳細: MVC のカスタム検証属性を作成する方法

于 2012-10-29T16:36:02.923 に答える
0

このアプローチを使用してみてください。

コントローラ:

public ActionResult Index()
{
    return View(new ExampleModel());
}

[HttpPost]
public ActionResult Index(ExampleModel model)
{
    if (model.AutoId == 0 && String.IsNullOrEmpty(model.VIN))
        ModelState.AddModelError("OneOfTwoFieldsShouldBeFilled", "One of two fields should be filled");
    if (model.AutoId != 0 && !String.IsNullOrEmpty(model.VIN))
        ModelState.AddModelError("OneOfTwoFieldsShouldBeFilled", "One of two fields should be filled");
    if (ModelState.IsValid)
    {
        return null;
    }
    return View();
}

見る:

@using(Html.BeginForm(null,null,FormMethod.Post))
{
    @Html.ValidationMessage("OneOfTwoFieldsShouldBeFilled")

    @Html.TextBoxFor(model=>model.AutoId)

    @Html.TextBoxFor(model=>model.VIN)
    <input type="submit" value="go" />
}
于 2012-10-25T13:30:57.820 に答える