2017-02-20 14 views
0

Сегодня мне нужно добавить ссылку на одну из моих таблиц столбцов.Добавить ссылку на Datatable в C# MVC 5, прежде чем передавать ее в виде

Таблица создана как дата в моем контроллере, в которой она заполняется запросом базы данных и затем отправляется на просмотр. Есть довольно много решений, чтобы поместить ссылку в datatable, но пока я не могу найти решение, которое не делает этого в представлении.

Моя проблема здесь в том, что однажды отправленный в представление что-либо, что я помещаю в столбцы редактирования или удаления (это где ссылки), просто появляется как строка.

Если попытаться вставить это в таблицу

<a href=\"delete?Id=\"" + reader.GetValue(0) + "\">delete</a>" 

затем на представлении я получить строку

"<a href=\"delete?Id=\"" + reader.GetValue(0) + "\">delete</a>". 

если попытаться создать элемент управления HyperLink, как этот

HyperLink delete = new HyperLink() { Text = "delete", NavigateUrl = "/delete?Id =\"" + reader.GetValue(0) }; 

и затем добавьте элемент управления в таблицу. В представлении я просто получаю строку «System.Web.UI.WebControls.HyperLink»

Я немного потерял, как исходить отсюда. Ниже приведен мой полный метод контроллера, который заполняет данные и передает его в представление. Нижеприведенный код представляет собой пример добавления элемента управления HyperLink и строки href.

Есть ли у кого-нибудь решение о том, как добавить гиперссылку или URL-адрес в datatable 'before', чтобы отправить его в представление.

public ActionResult Moved() 
    { 
     DataTable table = new DataTable(); 
     table.Columns.Add("Moved From", typeof(string)); 
     table.Columns.Add("Moved To", typeof(string)); 
     table.Columns.Add("Comment", typeof(string)); 
     table.Columns.Add("Edit"); 
     table.Columns.Add("Delete"); 

     using (var reader = SqlHelper.ExecuteReader(ConfigurationManager.ConnectionStrings["RedirectsReader"].ConnectionString, "usp_Redirect_SelectByType", new SqlParameter("@type", 2), new SqlParameter("@sort", "pattern"))) 
     { 
      while (reader.Read()) 
      { 
       HyperLink edit = new HyperLink() { Text = "edit", NavigateUrl = "/edit?Id =\"" + reader.GetValue(0) }; 
       HyperLink delete = new HyperLink() { Text = "delete", NavigateUrl = "/delete?Id =\"" + reader.GetValue(0) }; 

       table.Rows.Add(reader.GetValue(1).ToString(), reader.GetValue(2).ToString(), reader.GetValue(3).ToString(),edit,"<a href=\"delete?Id=\"" + reader.GetValue(0) + "\">delete</a>"); 
      } 
     } 
     return View(table); 
    } 

Это как мои таблицы создаются в представлении

<table class="table table-striped table-bordered display" cellspacing="0" width="100%" id="contentTable"> 
     <thead> 
      <tr> 
       @foreach (DataColumn col in Model.Columns) 
       { 
        <th>@col.ColumnName</th> 
       } 
      </tr> 
     </thead> 
     <tbody> 
      @foreach (DataRow row in Model.Rows) 
      { 
       <tr> 
        @foreach (DataColumn col in Model.Columns) 
        { 
         <td>@row[col.ColumnName]</td> 
        } 
       </tr> 
      } 
     </tbody> 
    </table> 

ответ

1

мне удалось достичь желаемого результата с помощью HtmlStrings.

Ниже приведен пример, если кто-то еще пытается сделать то же самое.

Public ActionResult TestPage() 
{ 
    DataTable table = new DataTable(); 
    table.Columns.Add("Link Column", typeof(HtmlString)); 

    HtmlString link = new HtmlString("<a href= **Your Link Here** >Click Here</a>") 
    Table.Rows.Add(link) 

    return View(table); 
} 
0

Почему вы не просто добавить гиперссылки на просмотр Aspx таким образом, вы не должны создавать гиперссылки. просто отправьте идентификатор строки в таблицу данных и привяжите ее к просмотру.

+0

Мои таблицы создаются динамически, используя петли foreach в представлении, используя таблицу, переданную ему из контроллера. Я хочу сохранить как можно больше ответственности клиента. Таким образом, имеет смысл просто добавлять гиперссылки к таблице, прежде чем они будут отправлены в представление. Вместо того, чтобы просмотреть процесс просмотра данных снова для идентификатора и добавить гиперссылки на стороне клиента. – user2920648

+1

Также мой вопрос задает вопрос, как это сделать, прежде чем перейти к представлению. – user2920648

2

@ Html.Raw может вам помочь.

при создании ссылок удалите escape-символ, поскольку они могут получить некоторую ошибку. table.Rows.Add("edit", "<a href=delete?Id=" +1 + ">delete</a>");

так что теперь вы должны изменить строку таблицы, чтобы посмотреть, как этот

<td>@Html.Raw(@row[col.ColumnName])</td>

+0

Я наткнулся на решение на конце, которое я разместил. Я попытаюсь использовать Html.Raw, чтобы увидеть результат. Единственный мой страх в том, что если он применяется ко всей строке, он может иметь нежелательные последствия для других ячеек в этой строке. Я хотел бы поблагодарить вас за ответ – user2920648

 Смежные вопросы

  • Нет связанных вопросов^_^