20

cshtmlファイルにドロップダウンリストがあります:

var kategorie_wlasna = new SelectList(
  (from z in Model.Kategoria
    where !formReadOnly || z.Id == Model.KategoriaWlasnaId 
      select z), 
  "Id", 
  "Nazwa");
...
@Html.DropDownListFor(
  model => model.KategoriaWlasnaId, 
  kategorie_wlasna,
  "----",
  htmlClassDropDownListDef)

私のviewModelには、必須のアノテーションなしのプロパティがあります。

public long KategoriaWlasnaId { get; set; }

ただし、フィールドは引き続き必須です。ブラウザで次のようになります。

<select class="input-validation-error form_object1" data-val="true" data-val-number="The field KategoriaWlasnaId must be a number." data-val-required="The KategoriaWlasnaId field is required." id="KategoriaWlasnaId" name="KategoriaWlasnaId">
  <option value="">-----</option>
  <option value="1227">Wykroczenie</option>
  <option value="1228">Przestępstwo</option>
</select>

私は何が欠けていますか?

4

3 に答える 3

44

それは正常です。値型は常に必要です。プロパティをnull可能にすることができます:

public long? KategoriaWlasnaId { get; set; }

これで不要になり、ユーザーがドロップダウンで要素を選択しなかった場合、その値はになりますnull。また、メッセージを必須にし、メッセージをパーソナライズしたい場合は、必須属性でメッセージを装飾できます。

[Required]
public long? KategoriaWlasnaId { get; set; }
于 2011-09-05T14:42:54.240 に答える
5

Application_StartメソッドにDataAnnotationsModelValidatorProvider次の行を追加することで、値型が不要になるようにデフォルトを変更できます。Global.asax.cs

ModelValidatorProviders.Providers.Clear(); 
ModelValidatorProviders.Providers.Add(new DataAnnotationsModelMetadataValidatorProvider());
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
于 2011-09-05T14:54:37.093 に答える
0

データ型(longを使用)が必須ではない場合、これはlongをstringに変更するだけでも機能します

public long KategoriaWlasnaId {get; セットする; }

パブリック文字列KategoriaWlasnaId{get; セットする; }

これもまた

パブリックロング?KategoriaWlasnaId {get; セットする; }

また、データアノテーションを使用している場合は、Nullable属性も使用できます。

于 2017-04-18T06:07:03.327 に答える