ASP에 필요한 확인란을 만들려면 어떻게 해야 합니까?NET 양식?
저는 이것에 대해 약간의 검색을 했고, 몇 가지 부분적인 답을 찾았지만, 저에게 따뜻한 퍼지를 주는 것은 아무것도 없습니다. "이것이 이것을 하는 올바른 방법입니다."이 질문에 대해 가장 자주 발생하는 불만 사항인 "체크박스는 두 가지의 합법적인 상태(체크박스는 선택됨과 선택 해제됨)를 가질 수 있습니다."에 대한 답변은 "약관에 동의합니다.확인란을 선택해야 등록을 완료할 수 있으므로 비즈니스 로직 관점에서 확인란을 선택해야 합니다.
응답과 함께 완전한 cut-n-paste 준비 코드 조각을 제공하십시오!CustomValidator(아마도 CustomValidator), 코드백, Javascript, IsValid에 대한 검사 등 몇 가지 항목이 있다는 것을 알고 있습니다. 제가 본 각 예에서 이러한 중요한 항목 중 하나가 누락되었다는 것이 실망스러운 부분입니다.
클라이언트 측 유효성 검사를 위한 Javascript 함수(jQuery 사용)...
function CheckBoxRequired_ClientValidate(sender, e)
{
e.IsValid = jQuery(".AcceptedAgreement input:checkbox").is(':checked');
}
서버 측 유효성 검사를 위한 코드백...
protected void CheckBoxRequired_ServerValidate(object sender, ServerValidateEventArgs e)
{
e.IsValid = MyCheckBox.Checked;
}
확인란 및 검증자의 ASP.Net 코드...
<asp:CheckBox runat="server" ID="MyCheckBox" CssClass="AcceptedAgreement" />
<asp:CustomValidator runat="server" ID="CheckBoxRequired" EnableClientScript="true"
OnServerValidate="CheckBoxRequired_ServerValidate"
ClientValidationFunction="CheckBoxRequired_ClientValidate">You must select this box to proceed.</asp:CustomValidator>
그리고 마지막으로, 당신의 포스트백에서 - 버튼이든 뭐든 간에...
if (Page.IsValid)
{
// your code here...
}
Andrew의 답변 C# 버전:
<asp:CustomValidator ID="CustomValidator1" runat="server"
ErrorMessage="Please accept the terms..."
onservervalidate="CustomValidator1_ServerValidate"></asp:CustomValidator>
<asp:CheckBox ID="CheckBox1" runat="server" />
코드백:
protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
args.IsValid = CheckBox1.Checked;
}
jquery에 의존하지 않고 서버 측 유효성 검사도 처리하는 진정한 유효성 검사기를 원한다면(서버 측 유효성 검사가 가장 중요한 부분임) 여기에 컨트롤이 있습니다.
public class RequiredCheckBoxValidator : System.Web.UI.WebControls.BaseValidator
{
private System.Web.UI.WebControls.CheckBox _ctrlToValidate = null;
protected System.Web.UI.WebControls.CheckBox CheckBoxToValidate
{
get
{
if (_ctrlToValidate == null)
_ctrlToValidate = FindControl(this.ControlToValidate) as System.Web.UI.WebControls.CheckBox;
return _ctrlToValidate;
}
}
protected override bool ControlPropertiesValid()
{
if (this.ControlToValidate.Length == 0)
throw new System.Web.HttpException(string.Format("The ControlToValidate property of '{0}' is required.", this.ID));
if (this.CheckBoxToValidate == null)
throw new System.Web.HttpException(string.Format("This control can only validate CheckBox."));
return true;
}
protected override bool EvaluateIsValid()
{
return CheckBoxToValidate.Checked;
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
if (this.Visible && this.Enabled)
{
System.Web.UI.ClientScriptManager cs = this.Page.ClientScript;
if (this.DetermineRenderUplevel() && this.EnableClientScript)
{
cs.RegisterExpandoAttribute(this.ClientID, "evaluationfunction", "cb_verify", false);
}
if (!this.Page.ClientScript.IsClientScriptBlockRegistered(this.GetType().FullName))
{
cs.RegisterClientScriptBlock(this.GetType(), this.GetType().FullName, GetClientSideScript());
}
}
}
private string GetClientSideScript()
{
return @"<script language=""javascript"">function cb_verify(sender) {var cntrl = document.getElementById(sender.controltovalidate);return cntrl.checked;}</script>";
}
}
Scott의 답변은 확인란 클래스에 적용됩니다.개별 확인란을 사용하려면 좀 더 신중해야 합니다.한 박스만 하는 거라면 아이디로 하는 게 좋습니다.이 예에서는 특정 확인란을 기준으로 이 작업을 수행하며 jQuery가 필요하지 않습니다.이는 또한 성가신 제어 ID를 Javascript에 입력하는 방법을 보여주는 좋은 예입니다.
.ascx:
<script type="text/javascript">
function checkAgreement(source, args)
{
var elem = document.getElementById('<%= chkAgree.ClientID %>');
if (elem.checked)
{
args.IsValid = true;
}
else
{
args.IsValid = false;
}
}
function checkAge(source, args)
{
var elem = document.getElementById('<%= chkAge.ClientID %>');
if (elem.checked)
{
args.IsValid = true;
}
else
{
args.IsValid = false;
}
}
</script>
<asp:CheckBox ID="chkAgree" runat="server" />
<asp:Label AssociatedControlID="chkAgree" runat="server">I agree to the</asp:Label>
<asp:HyperLink ID="lnkTerms" runat="server">Terms & Conditions</asp:HyperLink>
<asp:Label AssociatedControlID="chkAgree" runat="server">.</asp:Label>
<br />
<asp:CustomValidator ID="chkAgreeValidator" runat="server" Display="Dynamic"
ClientValidationFunction="checkAgreement">
You must agree to the terms and conditions.
</asp:CustomValidator>
<asp:CheckBox ID="chkAge" runat="server" />
<asp:Label AssociatedControlID="chkAge" runat="server">I certify that I am at least 18 years of age.</asp:Label>
<asp:CustomValidator ID="chkAgeValidator" runat="server" Display="Dynamic"
ClientValidationFunction="checkAge">
You must be 18 years or older to continue.
</asp:CustomValidator>
그리고 그 이면의 코드는:
Protected Sub chkAgreeValidator_ServerValidate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ServerValidateEventArgs) _
Handles chkAgreeValidator.ServerValidate
e.IsValid = chkAgree.Checked
End Sub
Protected Sub chkAgeValidator_ServerValidate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ServerValidateEventArgs) _
Handles chkAgeValidator.ServerValidate
e.IsValid = chkAge.Checked
End Sub
일반적으로 클라이언트 측에서 검증을 수행합니다.
<asp:checkbox id="chkTerms" text=" I agree to the terms" ValidationGroup="vg" runat="Server" />
<asp:CustomValidator id="vTerms"
ClientValidationFunction="validateTerms"
ErrorMessage="<br/>Terms and Conditions are required."
ForeColor="Red"
Display="Static"
EnableClientScript="true"
ValidationGroup="vg"
runat="server"/>
<asp:Button ID="btnSubmit" OnClick="btnSubmit_Click" CausesValidation="true" Text="Submit" ValidationGroup="vg" runat="server" />
<script>
function validateTerms(source, arguments) {
var $c = $('#<%= chkTerms.ClientID %>');
if($c.prop("checked")){
arguments.IsValid = true;
} else {
arguments.IsValid = false;
}
}
</script>
non-javascript way .aspx 페이지:
<form id="form1" runat="server">
<div>
<asp:CheckBox ID="CheckBox1" runat="server" />
<asp:CustomValidator ID="CustomValidator1"
runat="server" ErrorMessage="CustomValidator" ControlToValidate="CheckBox1"></asp:CustomValidator>
</div>
</form>
코드 이면:
Protected Sub CustomValidator1_ServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles CustomValidator1.ServerValidate
If Not CheckBox1.Checked Then
args.IsValid = False
End If
End Sub
필요한 작업(비즈니스 규칙):
If Page.IsValid Then
'do logic
End If
VB 코드에 대해 죄송합니다. . . 당신이 원한다면 C#으로 변환할 수 있습니다.제가 지금 일하고 있는 회사는 VB를 요구합니다 :)
언급URL : https://stackoverflow.com/questions/1228112/how-do-i-make-a-checkbox-required-on-an-asp-net-form
'programing' 카테고리의 다른 글
PostgreSQL: 역할이 로그인할 수 없습니다. (0) | 2023.05.06 |
---|---|
유닛 테스트 내부 코드가 번들 리소스를 찾을 수 없는 이유는 무엇입니까? (0) | 2023.05.06 |
Meteor가 실행되는 동안 다른 클라이언트에서 Meteor의 MongoDB에 액세스하려면 어떻게 해야 합니까? (0) | 2023.05.06 |
목표-C: id와 void의 차이 * (0) | 2023.05.06 |
Windows용 ActivePerl 또는 StrawberryPerl 중 어느 것을 선택해야 합니까? (0) | 2023.05.06 |