今天早上我正在与一个问题作斗争。我需要让用户填写多步骤表单。表单的某些步骤将具有复选框,当设置为“true”时,应该动态显示上传按钮。
这是否相对容易?
我的剃刀视图有一行生成每一步。
@Html.EditorFor(x => currentStep,null,"")
因此,我不认为直接添加jquery是一种选择。
我的ViewModel就是这样的。它基于实现IStepViewModel接口的类动态生成步骤列表。所以......你看到这个问题了吗?
[Serializable]
public class WizardViewModel
{
public String AccountNumber { get; set; }
public int CurrentStepIndex { get; set; }
public Boolean IsInitialized { get { return _isInitialized; } }
public IList<IStepViewModel> Steps { get; set; }
private Boolean _isInitialized = false;
public void Initialize()
{
try
{
Steps = typeof(IStepViewModel)
.Assembly.GetTypes().Where(t => !t.IsAbstract && typeof(UploadViewModel).IsAssignableFrom(t)).Select(t => (IStepViewModel)Activator.CreateInstance(t)).ToList();
_isInitialized = true;
//rewrite this. get the profile and wire them up or something.
this.AccountNumber = Tangible.Profiles.DR405Profile.CurrentUser.TangiblePropertyId;
}
catch (Exception e)
{
_isInitialized = false;
}
}
}
答案 0 :(得分:2)
是的,你可以这样做(最简单的是,如果你展示你的标记我们可以提供更多的detiled答案,这样你就可以使用一个适用于所有按钮的处理程序):
$('#checkbox').change(function(){
if($(this).is(':checked')){
$('#button').show()
}else{
$('#button').hide()
}
});
答案 1 :(得分:1)
您需要为每个复选框分配检查事件,然后检查值,然后显示按钮。像这样的东西(适应多个复选框)
$(init);
function init() {
$("#Checkbox1").change(checkBoxChanged);//add check event to all check boxes
}
function checkBoxChanged(){
if($("#Checkbox1").attr("checked"))//evaluate all checkbox conditions here
$("#Button1").show();
else
$("#Button1").hide();
}
请注意,这些元素需要这些ID值。如果要同时为所有复选框设置事件,可以使用类选择器。因此,如果您的所有复选框都有一个“MyCheckbox”类,您可以为它们分配相同的事件,例如......
$(".MyCheckbox").change(checkBoxChanged);
不确定下一点,但也许值得尝试这样的事情......
if($(".MyCheckbox").attr("checked"))//could work to evaluate all checked (not sure though)
$("#Button1").show();
答案 2 :(得分:0)
当然!做一些像:
$('#myCheckbox').toggle(function(){
$('#uploadBtn').show()
},function(){
$('#uploadBtn').hide()
})