Обновление PartialView mvc 4
Еу!
Как я могу обновить частичный вид с данными из модели?
Первый раз, когда страница загружает его, работая должным образом, но не тогда, когда я вызываю его из Action.
Созданная структура выглядит так:
Где угодно в моем представлении:
@{ Html.RenderAction("UpdatePoints");}
Мой PartialView "UpdatePoints":
<h3>Your points are @ViewBag.points </h3>
На контроллере у меня есть:
public ActionResult UpdatePoints()
{
ViewBag.points = _Repository.Points;
return PartialView("UpdatePoints");
}
Спасибо за вашу помощь!
UPDATE
Спасибо всем за вашу помощь! Наконец, я использовал JQuery/AJAX, как вы предложили, передав параметр с помощью модели.
Итак, в JS:
$('#divPoints').load('/Schedule/UpdatePoints', UpdatePointsAction);
var points= $('#newpoints').val();
$element.find('PointsDiv').html("You have" + points+ " points");
В контроллере:
var model = _newPoints;
return PartialView(model);
В представлении
<div id="divPoints"></div>
@Html.Hidden("newpoints", Model)
Ответы
Ответ 1
Итак, скажем, у вас есть View с PartialView, который нужно обновить нажатием кнопки:
<div class="target">
@{ Html.RenderAction("UpdatePoints");}
</div>
<input class="button" value="update" />
Есть несколько способов сделать это. Например, вы можете использовать jQuery:
<script type="text/javascript">
$(function(){
$('.button').on("click", function(){
$.post('@Url.Action("PostActionToUpdatePoints", "Home")').always(function(){
$('.target').load('/Home/UpdatePoints');
})
});
});
</script>
PostActionToUpdatePoints
- ваш Action
с атрибутом [HttpPost]
, который вы используете для обновления точек
Если вы используете логику в своих действиях UpdatePoints() для обновления очков, возможно, вы забыли добавить к ней атрибут [HttpPost]:
[HttpPost]
public ActionResult UpdatePoints()
{
ViewBag.points = _Repository.Points;
return PartialView("UpdatePoints");
}
Ответ 2
Вы также можете попробовать это.
$(document).ready(function () {
var url = "@(Html.Raw(Url.Action("ActionName", "ControllerName")))";
$("#PartialViewDivId").load(url);
setInterval(function () {
var url = "@(Html.Raw(Url.Action("ActionName", "ControllerName")))";
$("#PartialViewDivId").load(url);
}, 30000); //Refreshes every 30 seconds
$.ajaxSetup({ cache: false }); //Turn off caching
});
Он выполняет начальный вызов для загрузки div, а затем последующие вызовы имеют интервал 30 секунд.
В разделе контроллера вы можете обновить объект и передать объект в частичный вид.
public class ControllerName: Controller
{
public ActionResult ActionName()
{
.
. // code for update object
.
return PartialView("PartialViewName", updatedObject);
}
}
Ответ 3
Спасибо всем за вашу помощь!
Наконец, я использовал JQuery/AJAX, как вы предложили, передав параметр с помощью модели.
Итак, в JS:
$('#divPoints').load('/Schedule/UpdatePoints', UpdatePointsAction);
var points= $('#newpoints').val();
$element.find('PointsDiv').html("You have" + points+ " points");
В контроллере:
var model = _newPoints;
return PartialView(model);
В представлении
<div id="divPoints"></div>
@Html.Hidden("newpoints", Model)