web-dev-qa-db-ja.com

パーシャルビューmvc 4の更新

おい!モデル外のデータで部分ビューを更新するにはどうすればよいですか?初めて、ページが読み込まれたときは正常に動作しますが、アクションから呼び出したときは動作しません。私が作成した構造は次のようになります。

私の見解のどこでも:

 @{ 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)
22
Mario Levrero

したがって、ボタンをクリックして更新する必要がある、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>

PostActionToUpdatePointsActionであり、[HttpPost]属性、ポイントの更新に使用

アクションUpdatePoints()でロジックを使用してポイントを更新する場合、[HttpPost]属性を追加するのを忘れた可能性があります。

[HttpPost]
public ActionResult UpdatePoints()
{    
    ViewBag.points =  _Repository.Points;
    return PartialView("UpdatePoints");
}
25
Andriy Gubal

これを試すこともできます。

 $(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);
    }
}
7
Rashad Annara

ご協力ありがとうございました!最後に、モデルを使用してパラメーターを渡すように、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)
2
Mario Levrero

コントローラー:

public ActionResult Refresh(string ID)
    {
        DetailsViewModel vm = new DetailsViewModel();  // Model
        vm.productDetails = _product.GetproductDetails(ID); 
        /* "productDetails " is a property in "DetailsViewModel"
        "GetProductDetails" is a method in "Product" class
        "_product" is an interface of "Product" class */

        return PartialView("_Details", vm); // Details is a partial view
    }

これまでのインデックスページでは、リンクを更新する必要があります:

     <a href="#" id="refreshItem">Refresh</a>

このスクリプトはインデックスページにもあるはずです

<script type="text/javascript">

    $(function () {
    $('a[id=refreshItem]:last').click(function (e) {
        e.preventDefault();

        var url = MVC.Url.action('Refresh', 'MyController', { itemId: '@(Model.itemProp.itemId )' }); // Refresh is an Action in controller, MyController is a controller name

        $.ajax({
            type: 'GET',
            url: url,
            cache: false,
            success: function (grid) {
                $('#tabItemDetails').html(grid);
                clientBehaviors.applyPlugins($("#tabProductDetails")); // "tabProductDetails" is an id of div in your "Details partial view"
            }
        });
    });
});
0
Husam Ebish