おい!モデル外のデータで部分ビューを更新するにはどうすればよいですか?初めて、ページが読み込まれたときは正常に動作しますが、アクションから呼び出したときは動作しません。私が作成した構造は次のようになります。
私の見解のどこでも:
@{ 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)
したがって、ボタンをクリックして更新する必要がある、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");
}
これを試すこともできます。
$(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);
}
}
ご協力ありがとうございました!最後に、モデルを使用してパラメーターを渡すように、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)
コントローラー:
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"
}
});
});
});