2010-02-10 12 views
3

У меня есть код черный, на мой взгляд MVC следующим образом:выпадающий список OnChange событий и AJAX в MVC

<%using (Ajax.BeginForm("MyAction", new { action = "MyAction", controller = "Home", id = ViewData["selected"].ToString() }, new AjaxOptions { UpdateTargetId = "Div1" })) 
    { %> 
      <%=Html.DropDownList("ddl", ViewData["MyList"] as SelectList, new { onchange = "this.form.submit()" })%> 
       <%} %> 

Я хочу, чтобы установить значение ViewData [ «выбранного»], так что я могу отправить его желаемое действие. Может кто-нибудь предложить, как я могу это сделать?

спасибо!

ответ

11

Вместо того, чтобы использовать форму, почему бы не использовать событие jQuery onChange при выпадающем списке?

$(document).ready(function() { 
    $("#ddl").change(function() { 
     var strSelected = ""; 
     $("#ddl option:selected").each(function() { 
      strSelected += $(this)[0].value; 
     }); 
     var url = "/Home/MyAction/" + strSelected; 

     $.post(url, function(data) { 
      // do something if necessary 
     }); 
    }); 
}); 
+0

это правильный ответ о том, как это сделать с формой и ASP.MVC. http://stackoverflow.com/q/10566923/706363 – ppumkin

+0

[some] (http://stackoverflow.com/a/4100182/2218697) используйте '. $ .ajax ({' и вы используете '$ .post', так в чем разница, которая лучше всего подходит для ajax Get and Post? – stom

1

Посмотрите на это blog post, это поможет вам лучше понять, как работает Ajax.BeginForm. Я предлагаю вернуться к документации Microsoft, чтобы убедиться, что вы хорошо разбираетесь в библиотеке Ajax и ее работе.

+0

Я согласен с h вы. Но ссылка на ваш блог появляется на белой странице? – ppumkin

2

ViewData - это не место для передачи данных обратно на сервер. Значения элементов управления HTML-тегами в теге формы удобно доступны в методе действий. Вы можете получить эти значения либо из аргументов метода различных типов (model, formcollection и т. Д.).

Вот ссылка на free asp.net mvc ebook tutorial. Является хорошим ресурсом для asp.net mvc.

+2

mvc 1.0? LOLOL – Elisabeth

+1

@ Elisabeth Это супер старый, но я не мог не заметить ваш комментарий: когда Ricky опубликовал это, MVC 2.0 был выпущен только около 2 месяцев, поэтому в то время это была законная ссылка :-) – joshmcode

0

Найдено решение на этом посту it is just small chnge

Да, это правильно - только изменение замена:

OnChange = «this.form.submit();»

с:

onchange = "$ (this.form) .submit();"

Смежные вопросы