Html.EnumDropdownListFor : 기본 텍스트 표시
내 견해로는 enumdropdownlist (Asp.Net MVC 5.1의 새로운 기능)가 있습니다.
@Html.EnumDropDownListFor(m => m.SelectedLicense,new { @class="form-control"})
위의 코드를 실행하면 다음 열거 형에 대한 드롭 다운 목록이 표시됩니다.
public enum LicenseTypes
{
Trial = 0,
Paid = 1
}
하지만 기본적으로 내 드롭 다운 목록에 값 (사용자 지정 텍스트)이 있기를 원하며 이것이 제가 시도한 것입니다.
@Html.EnumDropDownListFor(m => m.SelectedLicense,"Select a license" ,new { @class="form-control"})
하지만 이제 문제는 내가 실행할 때 내 드롭 다운 목록이 다음과 같이 보입니다.
따라서 표시하려는 기본 텍스트가 기본적으로 나타나지 않습니다. 사용자가 "라이선스 선택"을 선택하고 양식을 제출하려고하면 "라이선스 선택"이라는 오류가 표시되지만 기본 텍스트로 표시되지 않습니다. 변경해야 할 사항이 있습니까?
추신 : 이미지는로드 될 때 페이지의 스크린 샷입니다. 기본적으로 선택한 옵션으로 평가판이 표시됩니다.
변경 시도 Index의 LicenseTypes에서 시작 1하지 0다음과 같은 :
public enum LicenseTypes
{
Trial = 1,
Paid = 2
}
그런 다음 Range attribute아래와 같이 선택한 라이선스 유형을 확인하는 데 사용할 수 있습니다 .
public class YourViewModel
{
//Other properties
[Range(1,int.MaxValue,ErrorMessage = "Select a correct license")]
public LicenseTypes LicenseTypes { get; set; }
}
마지막으로, 귀하의 관점에서 :
@Html.EnumDropDownListFor(m => m.LicenseTypes,"Select a license",new { @class = "form-control"})
@Html.ValidationMessageFor(m => m.LicenseTypes)
EnumDropDownListFor렌더링 될 때까지 SelectedLicense이미 유형의 기본값 인 0.
다음과 같이 SelectedLicense속성 유형을 nullable 열거 형으로 변경하면됩니다 .
public LicenseTypes? SelectedLicense { get; set; }
이렇게하면 Required속성 을 계속 사용할 수 있습니다 . Required속성은 모델이 널 (NULL)을 허용 할 순간에도, 널 응답을 허용하지 않습니다, 양식이되지 않습니다.
열거 형이 있습니다.
public enum Sex
{
Male,
Female
}
내 모델에는 다음이 있습니다.
[DisplayName("Sex")]
[Required]
public Sex? Sex { get; set; }
보기에서 :
@Html.EnumDropDownListFor(model => model.Sex, "Select sex", new { @class = "form-control", type = "text"})
이것에 의해 기본 옵션 "섹스 선택"이있는 드롭 다운이 있지만 유효성 검사는 열거 형 ( "남성"및 "여성")에서 제공하는 옵션 만 허용합니다.
MVC3에서 (EnumDropDownListFor 제외) 모델에서 사용했습니다.
[DisplayName("Sex")]
[Required(AllowEmptyStrings=false)]
public Sex? Sex { get; set; }
Sex = null;
Sexes = Repository.GetAutoSelectList<Sex>("");
보기 :
@Html.DropDownListFor(model => model.Sex, Model.Sexes, new { @class = "form-control", type = "text" })
ViewModel 클래스는 enum 속성에 기본값이 설정되어 있어야 기본적으로 선택된 공용이됩니다.
public class Test
{
public Cars MyCars { get; set; }
public enum Cars
{
[Display(Name = @"Car #1")]
Car1 = 1,
[Display(Name = @"Car #2")]
Car2 = 2,
[Display(Name = @"Car #3")]
Car3 = 3
}
}
제어 장치:
public class EnumController : Controller
{
// GET: Enum
public ActionResult Index()
{
var model = new Test {MyCars = Test.Cars.Car3}; // set default value
return View(model);
}
[HttpPost]
public ActionResult Index(Test model)
{
.....
}
}
전망:
@Html.BeginForm()
{
<div class="panel bg-white">
<div class="panel-header fg-white">
Enums
</div>
<div class="panel-content">
<div class="input-control select size3">
@Html.EnumDropDownListFor(model => model.MyCars)
</div>
</div>
<input type="submit" class="button success large" />
</div>
}
내가 조금 늦었나요?
enum 유형의 값을 변경하는 것은 그다지 만족스럽지 않습니다.
둘 다 모델 속성을 변경하여 null 허용으로 렌더링 한 다음 [Required] 특성을 추가하여 null 허용을 방지하지 않습니다.
ViewBag를 사용하여 드롭 다운의 기본 선택 값을 설정할 것을 제안합니다. 단지 아래에있는 컨트롤러의 라인 4만이 중요한 것입니다.
편집 : 아 ... 초보자 ... 내 첫 번째 아이디어는 드롭 다운이 모델에 바인딩되어 있기 때문에 초보자 본능으로 인해 ViewBag에서 원하는 값을 설정하려고 시도하기 때문에 ModelState.SetModelValue를 사용하는 것이 었습니다. 문제가 있다고 확신했습니다. ViewBag의 속성이 아니라 모델의 속성에 바인딩됩니다. 나는 모두 틀렸다 : ViewBag는 괜찮다. 코드를 수정했습니다.
여기에 예가 있습니다.
모델:
namespace WebApplication1.Models {
public enum GoodMusic {
Metal,
HeavyMetal,
PowerMetal,
BlackMetal,
ThashMetal,
DeathMetal // . . .
}
public class Fan {
[Required(ErrorMessage = "Don't be shy!")]
public String Name { get; set; }
[Required(ErrorMessage = "There's enough good music here for you to chose!")]
public GoodMusic FavouriteMusic { get; set; }
}
}
제어 장치:
namespace WebApplication1.Controllers {
public class FanController : Controller {
public ActionResult Index() {
ViewBag.FavouriteMusic = string.Empty;
//ModelState.SetModelValue( "FavouriteMusic", new ValueProviderResult( string.Empty, string.Empty, System.Globalization.CultureInfo.InvariantCulture ) );
return View( "Index" );
}
[HttpPost, ActionName( "Index" )]
public ActionResult Register( Models.Fan newFan ) {
if( !ModelState.IsValid )
return View( "Index" );
ModelState.Clear();
ViewBag.Message = "OK - You may register another fan";
return Index();
}
}
}
전망:
@model WebApplication1.Models.Fan
<h2>Hello, fan</h2>
@using( Html.BeginForm() ) {
<p>@Html.LabelFor( m => m.Name )</p>
<p>@Html.EditorFor( m => m.Name ) @Html.ValidationMessageFor( m => m.Name )</p>
<p>@Html.LabelFor( m => m.FavouriteMusic )</p>
<p>@Html.EnumDropDownListFor( m => m.FavouriteMusic, "Chose your favorite music from here..." ) @Html.ValidationMessageFor( m => m.FavouriteMusic )</p>
<input type="submit" value="Register" />
@ViewBag.Message
}
참고 URL : https://stackoverflow.com/questions/21878673/html-enumdropdownlistfor-showing-a-default-text
'program story' 카테고리의 다른 글
| 먼저 EF 코드가있는 고유 키 (0) | 2020.11.27 |
|---|---|
| 폴링없이 파일 변경 감지 (0) | 2020.11.27 |
| Android Studio에서 Gradle '오프라인 모드'를 비활성화하는 방법은 무엇입니까? (0) | 2020.11.26 |
| PHP 7에서“선언은… 호환되어야합니다”경고가 표시되지 않습니다. (0) | 2020.11.26 |
| Stream.Dispose는 항상 Stream.Close (및 Stream.Flush)를 호출합니까? (0) | 2020.11.26 |