Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use auto-postback with checkboxes and dropdowns?

I have a web flow (asp.net) which has a drop down and a check box.

When the check box is ticked, I need to disable some fields in that form. When a specific value is selected from the check box, I need to disable other fields.

I specify the checkbox like this:

<%=Html.CheckBox("IsResponseUnavailable", Model.IsResponseUnavailable)%>

And the drop down like this:

<%= Html.MyDropDownList(string.Format("Questions[{0}].Answer", i), (IEnumerable<SelectListItem>)ViewData["Periods"], Model.Questions[i].Answer)%>

Where MyDropDownList is an extension of Html.DropDownList

I've heard about auto-postback - but unsure how to use it - any advice would be great!

I'm using ASP.NET MVC 3.

Thanks! - L

like image 260
laura Avatar asked Mar 03 '11 14:03

laura


3 Answers

<%= Html.CheckBox("IsResponseUnavailable", Model.IsResponseUnavailable, 
    new { onClick = "this.form.submit();" }) %>

<%= Html.MyDropDownList(string.Format("Questions[{0}].Answer", i),  
    (IEnumerable<SelectListItem>)ViewData["Periods"], Model.Questions[i].Answer),
    new { onchange = "this.form.submit();" }) %>
like image 88
Dennis Traub Avatar answered Nov 03 '22 14:11

Dennis Traub


It depends on what you want. Do you want a postback to the server where the server will redraw the view with the correct changes? Or do you want javascript to run when the box is ticked so that the correct fields are changed? Javascript is much smoother and easier to do. There really isn't a way to do an auto-postback without some javascript. Dennis' answer is as basic as it gets and it still uses javascript.

It sounds like you might be better off with webforms instead of MVC if you are doing most of your logic during postbacks. Otherwise I'd try to enrich your UI a bit with some JQuery and take advantage of MVC since you're using it.

like image 32
Chev Avatar answered Nov 03 '22 14:11

Chev


You could just do this client side using a bit of jQuery something like

$('#IsResponseUnavailable').change(function() {
  if ($(this).has('[checked]')) {
    $('#idOfElement').attr('disabled', 'disabled');
  }
  else {
    $('#idOfElement').removeAttr('disabled');
  }
});

If you was trying to re-render the HTML for server side then you could take a look at the jQuery load() function

You can also auto submit a form with jQuery using this method but I don't think that's what you want to do.

like image 1
David Glenn Avatar answered Nov 03 '22 14:11

David Glenn