Не удается получить скрытое свойство для гиперссылки или кнопки
У меня есть собственный метод HTML Helper в моем проекте MVC4, и этот метод возвращает HTML-URL для WebGrid, как показано ниже:
<img title="Delete" src="../../Content/delete.png">
Я использую это изображение в качестве кнопки для столбца Действия на моем GridView. С другой стороны, когда я нажимаю кнопку "Удалить", возникает проблема из-за того, что поле id скрыто в связанной модели Entity и не может быть передано в контроллер. Потому что, когда я использую приведенный ниже код для тестирования в том же виде, он работает, и соответствующая запись удаляется:
@Html.ActionLink("Delete", "Delete","Admin", new { studentId = 10} )
@Html.Hidden("StudentID", 10)
<input type="submit" value="Delete" />
}
Итак, понятно, что проблема связана со скрытым полем. Не могли бы вы уточнить, как решить эту проблему? Я хочу продолжать использовать свой HTML Helper, чтобы я мог использовать кнопку с несколькими изображениями в одном столбце в моем GridView, как показано ниже:
....
grid.Column("Actions", format: (item) =>
new HtmlString(
@Html.ActionImage("../../Content/detail.png", "Detail", "my-class", "Detail", "Admin", new { item.StudentID}).ToString() +
@Html.ActionImage("../../icons/edit.png", "Edit", "my-class", "Edit", "Admin", new { item.StudentID}).ToString() +
@Html.ActionImage("../../icons/delete.png", "Delete", "my-class", "Delete", "Admin", new { item.StudentID}).ToString()
)
)
....
И вот класс HTML Helper, который я определил:
public static MvcHtmlString ActionImage(this HtmlHelper html, string imagePath, string alt, string cssClass,
string action, string controllerName, object routeValues)
{
var currentUrl = new UrlHelper(html.ViewContext.RequestContext);
var imgTagBuilder = new TagBuilder("img"); // build the <img> tag
imgTagBuilder.MergeAttribute("src", currentUrl.Content(imagePath));
imgTagBuilder.MergeAttribute("title", alt);
imgTagBuilder.MergeAttribute("class", cssClass);
string imgHtml = imgTagBuilder.ToString(TagRenderMode.SelfClosing);
var anchorTagBuilder = new TagBuilder("a"); // build the <a> tag
anchorTagBuilder.MergeAttribute("href", currentUrl.Action(action, controllerName, routeValues));
anchorTagBuilder.InnerHtml = imgHtml; // include the <img> tag inside
string anchorHtml = anchorTagBuilder.ToString(TagRenderMode.Normal);
return MvcHtmlString.Create(anchorHtml);
}
контроллер:
[HttpPost]
public ActionResult Delete(int studentId)
{
Student deletedStudent = repository.DeleteStudent(studentId );
if (deletedStudent != null)
{
TempData["message"] = string.Format("{0} was deleted",
deletedStudent.Name);
}
return RedirectToAction("Index");
}
1 ответ
Я предлагаю вам просто создать класс CSS с изображением вашей кнопки:
.edit-button {
display: block;
height:24px; //size of your img
width:24px;
background: url('myImage.jpg');
}
По вашему мнению, вам просто нужно создать ActionLink и указать используемый класс:
@Html.ActionLink(" ", "Detail", "Admin", new { id = 10}, new { @class = "edit-button" })
А затем, чтобы закончить, в вашем контроллере:
public ActionResult Edit(int id)
{
//do something
return View();
}
Если вы думаете, что это лучший выбор для создания ActionLink с изображением.
Надеюсь, поможет!