.net MVC Html.CheckBoxFor의 적절한 사용
내가 알고 싶은 Html.CheckBoxFor
것은 ASP.NET MVC 의 HTML 도우미에 대한 적절한 구문입니다 .
내가 달성하려는 것은 체크 박스를 처음에 ID 값으로 확인하여 컨트롤러에서 참조하여 여전히 확인되었는지 여부를 확인할 수 있도록하는 것입니다.
아래는 적절한 구문입니까?
@foreach (var item in Model.Templates)
{
<td>
@Html.CheckBoxFor(model => true, item.TemplateId)
@Html.LabelFor(model => item.TemplateName)
</td>
}
그것은 적절한 구문이 아닙니다.
첫 번째 매개 변수는 체크 박스 값 이 아니라 체크 박스에 대한 뷰 모델 바인딩이므로 다음과 같습니다.
@Html.CheckBoxFor(m => m.SomeBooleanProperty, new { @checked = "checked" });
첫 번째 매개 변수는 모델 내에서 부울 속성을 식별해야하며 ( 값을 반환하는 익명 메서드가 아닌 Expression ) 두 번째 속성은 추가 HTML 요소 속성을 정의합니다. 위의 속성이 처음에 체크 박스를 확인할 것이라고 100 % 확신하지는 않지만 시도해 볼 수 있습니다. 그러나 조심하십시오. 작동 할 수 있지만 나중에 유효한 모델 데이터를로드 할 때 문제가 발생할 수 있으며 해당 특정 속성이로 설정됩니다 false
.
올바른 방법
내 적절한 제안 은 해당 특정 부울 속성을 true
.
부동산 유형
Asp.net MVC HtmlHelper
확장 방법 및 내부 작업에 따라 확인란은 원하는대로 정수가 아닌 부울 값에 바인딩해야합니다. 이 경우 숨겨진 필드에 id
.
다른 도우미
물론 체크 박스 값과 동작에 대한 유연성을 높이기 위해 사용할 수있는 다른 도우미 메서드가 있습니다.
@Html.CheckBox("templateId", new { value = item.TemplateID, @checked = true });
참고 :
checked
은 HTML 요소 부울 속성이며 값 속성이 아니므로 값을 할당 할 수 있습니다. 올바른 HTML 구문에는 할당이 포함되어 있지 않지만 HTML 요소 속성으로 렌더링되는 정의되지 않은 속성이있는 익명 C # 개체를 제공 할 방법은 없습니다.
기본적으로 아래 코드는 모델 속성이 html 속성을 재정의하므로 선택된 확인란을 생성 하지 않습니다 .
@Html.CheckBoxFor(m => m.SomeBooleanProperty, new { @checked = "checked" });
대신 GET Action 메서드에서 다음을 수행해야합니다.
model.SomeBooleanProperty = true;
위의 내용은 모델이 유효하지 않은 경우에도 (예 : 양식 게시시 오류가 발생하는 경우) 선택 항목 을 유지합니다 (상자를 선택 취소 한 경우).
그러나 다음 코드는 확실히 체크 된 체크 박스를 생성 하지만 체크 해제 응답을 보존하지 않고 대신 양식의 오류가 발생할 때마다 체크 박스를 체크합니다.
@Html.CheckBox("SomeBooleanProperty", new { @checked = "checked" });
최신 정보
//Get Method
public ActionResult CreateUser(int id)
{
model.SomeBooleanProperty = true;
}
위의 코드는 시작할 때 체크 박스를 생성하고 양식의 오류에도 선택 항목을 보존합니다.
ASP.NET MVC 5에서 문제가 발생했습니다. 여기서 CheckBoxFor는 내 모델의 값이 true로 설정되어 있음에도 불구하고 서버 측 유효성 검사 실패시 내 확인란을 확인하지 않습니다. 내 Razor 마크 업 / 코드는 다음과 같습니다.
@Html.CheckBoxFor(model => model.MyBoolValue, new { @class = "mySpecialClass" } )
이 작업을 수행하려면 다음과 같이 변경해야했습니다.
@{
var checkboxAttributes = Model.MyBoolValue ?
(object) new { @class = "mySpecialClass", @checked = "checked" } :
(object) new { @class = "mySpecialClass" };
}
@Html.CheckBox("MyBoolValue", checkboxAttributes)
이것을 모델에 배치하십시오.
[DisplayName("Electric Fan")]
public bool ElectricFan { get; set; }
private string electricFanRate;
public string ElectricFanRate
{
get { return electricFanRate ?? (electricFanRate = "$15/month"); }
set { electricFanRate = value; }
}
그리고 이것은 당신의 cshtml에서 :
<div class="row">
@Html.CheckBoxFor(m => m.ElectricFan, new { @class = "" })
@Html.LabelFor(m => m.ElectricFan, new { @class = "" })
@Html.DisplayTextFor(m => m.ElectricFanRate)
</div>
다음을 출력합니다.
확인란 또는 굵은 레이블을 클릭하면 확인란을 선택 / 선택 취소합니다.
CSHTML에 다음을 추가 할 때까지 POST에서 다시 바인딩 할 때 위의 답변 중 어느 것도 나를 위해 작동하지 않았습니다.
<div class="checkbox c-checkbox">
<label>
<input type="checkbox" id="xPrinting" name="xPrinting" value="true" @Html.Raw( Model.xPrinting ? "checked" : "")>
<span class=""></span>Printing
</label>
</div>
// POST: Index
[HttpPost]
public ActionResult Index([Bind(Include = "dateInHands,dateFrom,dateTo,pgStatus,gpStatus,vwStatus,freeSearch,xPrinting,xEmbroidery,xPersonalization,sortOrder,radioOperator")] ProductionDashboardViewModel model)
다음과 같이 데이터베이스에서 동적으로 레이블을 표시하는 솔루션을 찾고있었습니다.
checkbox1 : Option 1 text from database
checkbox2 : Option 2 text from database
checkbox3 : Option 3 text from database
checkbox4 : Option 4 text from database
그래서 위의 솔루션 중 어느 것도 나를 위해 일하지 않았으므로 다음과 같이 사용했습니다.
@Html.CheckBoxFor(m => m.Option1, new { @class = "options" })
<label for="Option1">@Model.Option1Text</label>
@Html.CheckBoxFor(m => m.Option2, new { @class = "options" })
<label for="Option2">@Mode2.Option1Text</label>
이런 식으로 사용자가 레이블을 클릭하면 확인란이 선택됩니다.
누군가를 도울 수 있습니다.
나는 이것을 작동시키는 데 어려움을 겪었고 FromCollection을 사용하기를 원하거나 필요로하는 사람을 위해 다른 솔루션을 추가했습니다.
대신에:
@Html.CheckBoxFor(model => true, item.TemplateId)
HTML 도우미를 다음과 같이 포맷하십시오.
@Html.CheckBoxFor(model => model.SomeProperty, new { @class = "form-control", Name = "SomeProperty"})
그런 다음 로직이 어디에 있든 viewmodel / model에서 :
public void Save(FormCollection frm)
{
// to do instantiate object.
instantiatedItem.SomeProperty = (frm["SomeProperty"] ?? "").Equals("true", StringComparison.CurrentCultureIgnoreCase);
// to do and save changes in database.
}
참고URL : https://stackoverflow.com/questions/12674572/proper-usage-of-net-mvc-html-checkboxfor
'program tip' 카테고리의 다른 글
브라우저에서 운영 체제가 사용하는 소수 구분 기호를 어떻게 알 수 있습니까? (0) | 2020.10.29 |
---|---|
하나의 솔루션에서 여러 프로젝트간에 스크립트를 어떻게 공유합니까? (0) | 2020.10.29 |
드롭 다운 상자에서 텍스트 가져 오기 (0) | 2020.10.29 |
Unix (또는 Windows)에서 (이름없는) 파이프를 사용하여 한 프로세스의 표준 출력을 여러 프로세스로 어떻게 보낼 수 있습니까? (0) | 2020.10.29 |
Mac OSX 매버릭스에서 Maven을 찾을 수 없음 (0) | 2020.10.28 |