ASP.NET MVC 5:如何从操作 link 中呈现 div 中的局部视图?
ASP.NET MVC 5: How do you render a partial view in a div from an action link?
我不熟悉 ASP.NET 和任何类型的 Web 开发。我已经搜索了很多小时来解决我的问题,但我似乎无法在 div.
中显示我的局部视图
发生的事情是显示了视图,但它替换了整个页面,而不是显示在主页的 div 中。
我的控制器看起来像这样:
public class MyController
{
public ActionResult ShowView(int id)
{
// get view model from id
return PartialView(viewModel);
}
}
我的主视图看起来像这样
@model List<viewModelType>
<div>
@foreach (var item in Model)
{
<div>
@Html.ActionLink(item.Name, "ShowView", new { id = item.ID }, new { @class = "btn-sm" })
</div>
}
</div>
<div>
// here is where I want to partial view to go!
</div>
这是局部视图的样子:
@model viewModelType
<div>Model.DataToDisplay</div>
你需要一点 JavaScript 才能做到你想做的事。基本上,您必须为您的链接连接一个点击事件处理程序,当用户点击其中一个时,将触发 ajax 请求。
@model List<viewModelType>
<div>
@foreach (var item in Model)
{
<div>
@Html.ActionLink(item.Name, "ShowView", new { id = item.ID }, new { @class = "btn-sm js-show-view-btn" })
</div>
}
</div>
<div class="js-show-view">
// here is where I want to partial view to go!
</div>
<!-- Before the following script been loaded, he jQuery should have been loaded -->
<script>
$(function(){
$(".js-show-view-btn").click(function(e){
e.preventDefault();
$.ajax({
method: "GET",
url: "/MyController/ShowView",
data: { id = $(e).id },
cache: false
}).success(function(data)
{
$(".js-show-view").html(data);
});
})
});
</script>
这对你有用吗?
[ChildActionOnly]
public class MyController
{
public ActionResult ShowView(int id)
{
// get view model from id
return PartialView(viewModel);
}
}
在您看来:
<div>
// here is where I want to partial view to go!
@Html.Action("ShowView")
</div>
好的,我在 Christos 的帮助下弄明白了。
主视图应如下所示:
@model List<viewModelType>
<div>
@foreach (var item in Model)
{
<div>
<button class="js-showViewBtn" data-itemId=@item.ID>item.Name</button>
</div>
}
</div>
<div class="js-show-view">
// here is where I want to partial view to go!
</div>
<script type="text/javascript">
$(function () {
$('.js-showViewBtn').click(function (e) {
e.preventDefault();
var itemId = $(this).data("itemId");
$.ajax({
method: "GET",
url: "/MyController/ShowView",
data: { id: itemId },
cache: false
}).success(function(data){
$('.js-show-view').html(data);
});
})
});
</script>
由于某种原因,项目的 ID 没有被返回,所以我试了一下,它成功了。希望这对其他人也有帮助。
感谢克里斯托斯的帮助。
我不熟悉 ASP.NET 和任何类型的 Web 开发。我已经搜索了很多小时来解决我的问题,但我似乎无法在 div.
中显示我的局部视图发生的事情是显示了视图,但它替换了整个页面,而不是显示在主页的 div 中。
我的控制器看起来像这样:
public class MyController
{
public ActionResult ShowView(int id)
{
// get view model from id
return PartialView(viewModel);
}
}
我的主视图看起来像这样
@model List<viewModelType>
<div>
@foreach (var item in Model)
{
<div>
@Html.ActionLink(item.Name, "ShowView", new { id = item.ID }, new { @class = "btn-sm" })
</div>
}
</div>
<div>
// here is where I want to partial view to go!
</div>
这是局部视图的样子:
@model viewModelType
<div>Model.DataToDisplay</div>
你需要一点 JavaScript 才能做到你想做的事。基本上,您必须为您的链接连接一个点击事件处理程序,当用户点击其中一个时,将触发 ajax 请求。
@model List<viewModelType>
<div>
@foreach (var item in Model)
{
<div>
@Html.ActionLink(item.Name, "ShowView", new { id = item.ID }, new { @class = "btn-sm js-show-view-btn" })
</div>
}
</div>
<div class="js-show-view">
// here is where I want to partial view to go!
</div>
<!-- Before the following script been loaded, he jQuery should have been loaded -->
<script>
$(function(){
$(".js-show-view-btn").click(function(e){
e.preventDefault();
$.ajax({
method: "GET",
url: "/MyController/ShowView",
data: { id = $(e).id },
cache: false
}).success(function(data)
{
$(".js-show-view").html(data);
});
})
});
</script>
这对你有用吗?
[ChildActionOnly]
public class MyController
{
public ActionResult ShowView(int id)
{
// get view model from id
return PartialView(viewModel);
}
}
在您看来:
<div>
// here is where I want to partial view to go!
@Html.Action("ShowView")
</div>
好的,我在 Christos 的帮助下弄明白了。
主视图应如下所示:
@model List<viewModelType>
<div>
@foreach (var item in Model)
{
<div>
<button class="js-showViewBtn" data-itemId=@item.ID>item.Name</button>
</div>
}
</div>
<div class="js-show-view">
// here is where I want to partial view to go!
</div>
<script type="text/javascript">
$(function () {
$('.js-showViewBtn').click(function (e) {
e.preventDefault();
var itemId = $(this).data("itemId");
$.ajax({
method: "GET",
url: "/MyController/ShowView",
data: { id: itemId },
cache: false
}).success(function(data){
$('.js-show-view').html(data);
});
})
});
</script>
由于某种原因,项目的 ID 没有被返回,所以我试了一下,它成功了。希望这对其他人也有帮助。
感谢克里斯托斯的帮助。