Рендеринг частичного вида onclick in asp.net проект mvc 3
в моем проекте mvc у меня есть простой список элементов с такими операциями crud:
<tbody>
@{
foreach (var item in Model)
{
<tr>
<td>@item.Title</td>
<td>@item.Body</td>
<td>@item.Price</td>
<td><span class="EditLink ButtonLink" noteid="@item.Id">Edit</span> | <span>@Html.ActionLink("Delete", "Delete", new { id = @item.Id})</span>
| @Html.ActionLink("Detalji", "Details", new { id = @item.Id})
</td>
</tr>
}
}
</tbody>
Мне интересно, можно ли отобразить представление деталей как частичное под таблицей, когда я нажимаю на детали. Я имею в виду, когда я клик детали, чтобы показать мне детали зрения, я хочу его под моей таблицей в каком-то div или абзаце.
пожалуйста, помогите.
3 ответов
вы можете использовать AJAX. Но сначала давайте улучшим ваш код, избавившись от этих циклов и заменив их шаблонами отображения:
@model IEnumerable<SomeViewModel>
<table>
<thead>
<tr>
<th>Title</th>
<th>Body</th>
<th>Price</th>
<th>actions ...</th>
</tr>
</thead>
<tbody>
@Html.DisplayForModel()
</tbody>
</table>
<div id="details"></div>
а затем определите шаблон отображения (~/Views/Shared/DisplayTemplates/SomeViewModel.cshtml
):
@model SomeViewModel
<tr>
<td>@Html.DisplayFor(x => x.Title)</td>
<td>@Html.DisplayFor(x => x.Body)</td>
<td>@Html.DisplayFor(x => x.Price)</td>
<td>
<!-- no idea what the purpose of this *noteid* attribute on the span is
but this is invalid HTML. I would recommend you using the
HTML5 data-* attributes if you wanted to associate some
metadata with your DOM elements
-->
<span class="EditLink ButtonLink" noteid="@Model.Id">
Edit
</span>
|
<span>
@Html.ActionLink("Delete", "Delete", new { id = Model.Id })
</span>
|
@Html.ActionLink(
"Detalji", // linkText
"Details", // actionName
null, // controllerName
new { id = Model.Id }, // routeValues
new { @class = "detailsLink" } // htmlAttributes
)
</td>
</tr>
теперь все, что осталось, это AJAXify эту ссылку детали в отдельном файле javascript:
$(function() {
$('.detailsLink').click(function() {
$('#details').load(this.href);
return false;
});
});
что предполагает, конечно, что у вас есть следующее:
public ActionResult Details(int id)
{
SomeDetailViewModel model = ... fetch the details using the id
return PartialView(model);
}
возможно, это не тот ответ, который вы ищете...
вы можете сделать вызов ajax onClick
of details
ссылка и добавить ответ на некоторые div,
$(".details").click(function(){
var id = $(this).attr("id");
$.ajax(
{
type: 'POST',
data: "{'id':" + "'" + id + "'}",
dataType: 'html',
url: 'url/to/controller/',
success: function (result) {
alert('Success');
$("#ajaxResponse").html(result);
},
error: function (error) {
alert('Fail');
}
});
});
бортовой контроллер
[HttpPost]
public ActionResult Details(string id)
{
// do some processing
return PartialView("YourPartialView");
}
в вашей разметке определить div
это будет содержать ответ ajax call
<div id="ajaxResponse"></div>
да. Это возможно. Желательно, чтобы вы отображали детали в ajax. Потому что вам не нужно будет отображать все детали для каждой строки. И пользователю нужно будет нажать на подробности.