0

特定のフィールドがユーザー編集可能であるかどうかを確認するために、RequiredIf属性の代わりにリモート検証を使用するように上司から指示を受けました。

今のところ、私のコードは次のようになっています-

モデルを表示

public class FooModel
{
   // SNIP: Unimportant extra variables

   public int? DeviceId;
   public int? ProviderId;

   [Remote("IsMessageRequired", "Foo", 
           AdditionalFields="DeviceId,CarrierId",
           ErrorMessage="(required for other")]
   public string MessageAddress { get;set; }

   // SNIP: Unimportant other details
}

コントローラ

public class FooController
{
    // SNIP: Unimportant details

    public JsonResult IsMessageRequired(string messageAddress, int? device, int? carrier)
    {
        if(!string.IsNullOrEmpty(messageAddress))
            return Json(true, JsonRequestBehavior.AllowGet);

        // Conditions:
        // A) Device = "Samsung" / Carrier = "Other"
        // B) Device = "Other"

        if(device = FooModel.GetDeviceIdByName("Samsung")
           && carrier = FooModel.GetProviderIdByName("Other")
        {
            return Json(! string.IsNullOrEmpty(pageAddress), JsonRequestBehavior.AllowGet);
        }

        if(device = FooModel.GetDeviceIdByName("Other"))
        {
            return Json(! string.IsNullOrEmpty(pageAddress), JsonRequestBehavior.AllowGet);
        }

        // Default condition occurs on first-run scenarios.
        return Json(true, JsonRequestBehavior.AllowGet);
    }

    // SNIP: Other unimportant details
}

...そして最後に、私の見解

@model FooProject.Models.FooModel

@Html.DropDownFor(x => x.DeviceId)
@Html.DropDownFor(x => x.ProviderId)

@Html.TextBoxFor(x => x.MessageAddress)
@Html.ValidationMessageFor(x => x.MessageAddress)

質問:検証は、値が入力された場合にのみ発生しますが、テキストボックスに値が含まれていない場合は発生しません。リモート検証は、テキストボックスに値がある場合にのみ機能しますか?そうでない場合、この設定にどのように間違ってアプローチしていますか?

4

1 に答える 1

1

$.trim値を返す場合にのみ起動します。つまり、すべての空でない値と空白以外の値に対して発生します。

于 2013-02-05T20:35:12.527 に答える