Не удается получить скрытое свойство для гиперссылки или кнопки

У меня есть собственный метод 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 с изображением.

Надеюсь, поможет!

Другие вопросы по тегам