Подтвердить что ты не робот

Обновление 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)
4b9b3361

Ответ 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)