嗯,這聽起來可能矯枉過正,但我會用b移動到其他解決方案。您需要JavaScript腳本代碼才能從演示的角度來完成它 - 而且您還需要服務器端代碼來執行驗證。
如果您只實現客戶端驗證,如果瀏覽器不支持JavaScript,或者只是被禁用,系統將如何運行?你不能把JavaScript的支持是理所當然的......
OTOH,你會提供最佳的用戶體驗,如果你補充說,客戶端功能你在談論...
以及您的疑問如何進行服務器端驗證:使用ASP.NET MVC很容易 - 在加載時,只需設置您在發佈期間閱讀的相同ViewData條目/ ViewModel屬性即可。
編輯讓我們來談談一個完整的解決方案。
再次,我不知道我明白你在這裏需要什麼。你在談論單選按鈕,但你似乎也認爲你可以單獨控制它們(許多無線電裝置綁定到很多領域)。通常情況下,一組單選按鈕通常綁定到相同的字段,每個單選按鈕的含義不同(如同單個下拉列表一樣)。當然,這並不能意思你的數據庫的行爲必須以同樣的方式...
見這個例子:
<% using(Html.BeginForm("HandleForm", "Home")) { %>
Select your favorite color:<br />
<%= Html.RadioButton("favColor", "Blue", true, new { id = "rbColorBlue", class = "favColor" }) %> Blue <br />
<%= Html.RadioButton("favColor", "Purple", false, new { id = "rbColorPurple", class = "favColor" })%> Purple <br />
<%= Html.RadioButton("favColor", "Red", false, new { id = "rbColorRed", class = "favColor" })%> Red <br />
<%= Html.RadioButton("favColor", "Orange", false, new { id = "rbColorOrange", class = "favColor" })%> Orange <br />
<%= Html.RadioButton("favColor", "Yellow", false, new { id = "rbColorYellow", class = "favColor" })%> Yellow <br />
<%= Html.RadioButton("favColor", "Brown", false, new { id = "rbColorBrown", class = "favColor" })%> Brown <br />
<%= Html.RadioButton("favColor", "Green", false, new { id = "rbColorGreen", class = "favColor" })%> Green
<%= Html.RadioButton("favColor", "Other", false, new { id = "rbColorOther", class = "favColor" })%> Other
<div id="divOtherColorText" style="display: block">
Describe the color you want here:<br />
<%=Html.TextArea("otherColorText", new { id = "taOtherColor" }) %><br />
</div>
<% } %>
這將綁定到單個控制器參數,favColor
,具有缺省值「藍色」。看到這一點,爲了方便起見,我們爲每個單選按鈕分配一個不同的客戶端ID(rbColorBlue
,rbColorGreen
等等)。這意味着即使它們代表服務器端控制器的單個值,您也可以在jQuery代碼中單獨處理每個單選按鈕。
談到服務器端代碼,這是該行動將如何看起來像:
public class HomeController : Controller
{
public ActionResult HandleForm(string favColor, string otherColorText)
{
// Add action logic here
// If you want to have a separated field for your database,
// just do something like that:
MyDbFacade.BlueColorField = (favColor == "Blue");
MyDbFacade.GreenColorField = (favColor == "Green");
...
return View();
}
}
(當然,你也可以使用一個ViewModel工作,但我不會談論這個選項在這裏。 )
回到客戶端。假設您不想顯示taOtherColor
,除非用戶選擇rbColorOther
單選按鈕。 jQuery代碼會是這樣的:
$(document).ready(function() {
// If user selects any radiobutton:
if ($('#rbColorOther:checked').length > 0) {
$("#divOtherColorText").show();
} else {
$("#divOtherColorText").hide();
}
});
我想那就是它。讓我知道如果我錯過了什麼...... :-)
我真的無法理解,因爲你幾乎沒有使用任何標點符號,如果你能修正它,看看我的意思是什麼會更好。 – rsenna 2011-01-25 15:06:41
@rsenna我所能做的只是空間出來,所以我希望這是更好的 – Myzifer 2011-01-25 15:14:31
@rsenna:所以任何想法或解決方案? – Myzifer 2011-01-26 10:18:54