Что можно попытаться сделать это это (требуемый jQuery):
$("#yourDropdown").change(function() {
var f = $("#yourForm");
var action = f.attr("action");
var serializedForm = f.serialize();
$.post(action, serializedForm,
function () { alert("Finished! Can do something here!") });
});
Мы можем видеть Ваш код Контроллера? Можно использовать Запрос. IsMvcAjaxRequest () в Вашем контроллере для возврата только части данных, если это - Запрос Ajax вместо всего Представления. В Вашем Представлении перемещают Вашу форму в PartialView и вызов
Html.RenderPartial("viewname");
В Вашем Контроллере:
if (Request.IsMvcAjaxRequest())
{
return PartialView("viewname");
}
else
{
//Non Ajax code here.
}
У меня тоже была такая же проблема. У меня было несколько раскрывающихся списков в частичных представлениях, чтобы они могли обновляться независимо, но установка атрибута «onchange» продолжала обновлять всю страницу.
Я заметил, что «this.form.submit ()» всегда относится к основной форме, вне частичный вид. Поэтому вместо этого я добавил кнопку отправки внутри формы AJAX и сослался на это:
<%=Html.DropDownList("data", ViewData["data"] as SelectList
, new { onchange = "$(\"#button" + Model.IdIndex + "\").click();" })%>
<input type="submit" id="button<%=Model.IdIndex %>" style="display: none" /><br />
Моя "Модель. Надеюсь, это поможет.
Если вы используете MVC, то, вероятно, лучший способ - это с jQuery. ...
<%= Html.DropDownList("sortByList", new SelectList(ViewData["SortOptions"]) %>
<%= Html.TextBox("updateText") %>
<script>
$("#sortByList").change(function() {
$.ajax({
url: <%= Url.Action("UpdateForm")%>,
type: "POST",
data: { 'sortBy': $(this).val() },
dataType: "json",
success: function(result) { $('#updateText').text(result); },
error: function(error) { alert(error); }
})
});
</script>
Ваш контроллер будет что-то вроде:
public JsonResult UpdateForm(string sortBy)
{
string result = "Your result here";
return Json(result);
}