ProgramingTip

asp.net mvc보기 모델의 언어

bestdevel 2020. 11. 23. 19:44
반응형

asp.net mvc보기 모델의 언어


이 모델이 있습니다.

public class SearchModel
{
    [DefaultValue(true)]
    public bool IsMale { get; set; }
    [DefaultValue(true)]
    public bool IsFemale { get; set; }
}

그러나 여기에 내 연구와 답변에 DefaultValueAttribute따르면 문장을 설정하지 않습니다. 그러나 그 대답은 2008 년부터였습니다.보기에 그때 개인 필드를 사용하여 값을 true로 설정하는 것보다 속성이나 더 좋은 방법이 있습니까?

어쨌든보기는 다음과 가변적입니다.

@using (Html.BeginForm("Search", "Users", FormMethod.Get))
{
<div>
    @Html.LabelFor(m => Model.IsMale)
    @Html.CheckBoxFor(m => Model.IsMale)
    <input type="submit" value="search"/>
</div>
}

생성자에서 설정하십시오.

public class SearchModel
{
    public bool IsMale { get; set; }
    public bool IsFemale { get; set; }

    public SearchModel()
    { 
        IsMale = true;
        IsFemale = true;
    }
}

그런 다음 GET 작업의 뷰에 전달합니다.

[HttpGet]
public ActionResult Search()
{
    return new View(new SearchModel());
}

상속 모델이 생성 될 때 ViewModels적용되는 다음 생성자 코드를 사용하여 기본 클래스를 만듭니다 DefaultValueAttributes.

public abstract class BaseViewModel
{
    protected BaseViewModel()
    {
        // apply any DefaultValueAttribute settings to their properties
        var propertyInfos = this.GetType().GetProperties();
        foreach (var propertyInfo in propertyInfos)
        {
            var attributes = propertyInfo.GetCustomAttributes(typeof(DefaultValueAttribute), true);
            if (attributes.Any())
            {
                var attribute = (DefaultValueAttribute) attributes[0];
                propertyInfo.SetValue(this, attribute.Value, null);
            }
        }
    }
}

그리고 ViewModels에서 상속하십시오.

public class SearchModel : BaseViewModel
{
    [DefaultValue(true)]
    public bool IsMale { get; set; }
    [DefaultValue(true)]
    public bool IsFemale { get; set; }
}

특정 값 사용 :

[Display(Name = "Date")]
public DateTime EntryDate {get; set;} = DateTime.Now;//by C# v6

동일한 모델을 서버에 게시해야하는 경우 생성자 bool이슈가있는 솔루션 이 실행되지 않습니다. 다음 모델이 가정 해봅시다.

public class SearchModel
{
    public bool IsMale { get; set; }

    public SearchModel()
    { 
        IsMale = true;
    }
}

보기에는 다음과 같은 것이 있습니다.

@Html.CheckBoxFor(n => n.IsMale)

문제는 사용자가이 확인란의 선택을 취소하고 서버에 게시 할 때 발생합니다. 생성자에 기본값이 설정됩니다 (이 경우 true).

따라서이 경우보기에 기본값을 지정하는 것으로 끝납니다.

@Html.CheckBoxFor(n => n.IsMale, new { @checked = "checked" })

당신은 무엇을 가질 것입니까? 아마도 기본 검색과 어딘가에서로드하는 검색으로 끝날 것입니다. 기본 검색에는 기본 생성자가 필요하므로 Dismissile이 이미 제안한 것과 같은 것을 만드십시오.

다른 곳에서 검색 기준을로드하는 경우 매핑 논리가있을 수 있습니다.


@Dismissile의 대답에 대해 언급하고 싶었습니다. 그의 대답을 편집하거나 주석을 추가 할 수 없기 때문에 View 생성자 호출 new이 오류 (Visual Studio 2015에서 테스트 됨)가 발생할 것이라는 점을 지적 할 수 없기 때문입니다. View 클래스가 아닌 모델의 인스턴스를 생성합니다. 올바른 코드 줄은 다음과 같습니다.

return View(new SearchModel());

참고 URL : https://stackoverflow.com/questions/7637022/default-value-in-an-asp-net-mvc-view-model

반응형