2017-11-17 10 views
0

EF의 CORE제어 기본값 - 나는 모두</p> <pre><code>[DefaultValue(true)] </code></pre> <p>및</p> <pre><code>public bool IsActive { get; set; } = true; </code></pre> <p>과 좋은 법안을 위해 내가 추가 한을 사용하여 모델에 부울에 대한 기본을 설정 한

modelBuilder.Entity<modelName>().Property(p => p.IsActive).HasDefaultValue(true); 

모든 것이 잘 작동하고 데이터베이스 테이블에 올바른 "기본값 또는 바인딩"이 있습니다. 내 작성보기에서 기본 속성을 사용하고 싶지만보기에서 모델의 기본 속성을 사용하는 방법을 찾을 수 없습니다.

<input asp-for="IsActive" class="form-control" checked="checked"/> 

작품을 사용하지만 나를 checked="checked" 값에 자신을 하드 코딩입니다. 보기에서 모델의 기본값을 읽으려면 어떻게해야합니까? 요청 코드를 편집

는 모델은 액션 메소드 템플릿에 의해 생성 된 기본입니다

using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.ComponentModel.DataAnnotations.Schema; 

namespace securitytrials.Models { 
    public class CaseType { 
     [Key] 
     [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     public int TheID { get; set; } 
     [Display(Name = "Active")] 
     public bool IsActive { get; set; } = true; 
    } 
} 

입니다.

public IActionResult Create() { 
    return View(); 
} 

기본값은 많지 않으므로 기본값을 포함하지 않았습니다. DbContext.OnModelCreating 그냥

protected override void OnModelCreating(ModelBuilder modelBuilder) { 
     modelBuilder.Entity<CaseType>().Property(p => p.IsActive).HasDefaultValue(true); 
    } 

답변

0

DefaultValue 실제로 아무것도하지 않는 것입니다. 특정 상황에서 코드 생성기가 활용할 수 있지만 주로 웹 응용 프로그램의 컨텍스트에서 완전히 무의미합니다. docs 세부 사항 :

DefaultValueAttribute는 속성 값으로 구성원을 자동으로 초기화하지 않습니다. 코드에서 초기 값을 설정해야합니다.

HasDefaultValue는 단지 열의 DEFAULT을 설정, 그래서 당신은 실제 테이블 스키마 기본을 반영하려는 경우 당신은뿐만 아니라 그것을해야 할 수도 있지만, 실제로 코드를 할 수있는 유일한 방법은 다음과 같습니다

public bool IsActive { get; set; } = true; 

당신이 묻는 것이 완전히 명확하지 않습니다. 기본값을 표시하는 입력에는 그만큼 문제가 없어야합니다. 그렇지, 다음 모델에 약간의 문제가있어 만약

<input type="textbox" class="form-control" checked="checked" /> 

:

<input asp-for="IsActive" class="form-control" /> 

생성됩니다 즉, 코드를 다음과 같습니다. 기본값을 추가 한 클래스가 혼란 스럽거나 코드에서 다른 값이 변경되면 값이 변경됩니다. 그러나 작업 방법처럼 더 많은 코드를 사용하지 않아도 말할 수는 없습니다.

+0

내가 말했던 것과 말했던 것을 정확히하고 싶다면 모델이 점검해야한다고 말하면 체크 박스를 "선택"으로 설정하십시오. 모델은 하나뿐입니다. 동작 방법은 기본값입니다.원래 질문에 추가했습니다. –

+0

Do return return (new CaseType()); –