Asp.net MVC GridView опция редактирования столбцов
У меня есть мнение:
<%= Html.Grid(Model.data).Columns(column => {
column.For(x => x.results)
.Action(item => Html.ActionLink(item.results,"Edit").ToString(),
item => Html.TextBox("result",item.results).ToString(),
item => (Model.data == item))
.Named("Results");
column.For(x => x.refId)
.Named("Reference ID");
column.For(x => x.fileLocation)
.Named("File Location");
})
.Attributes(style => "width:100%", border => 1)
И контроллер выглядит так:
public ActionResult Index()
{
// IEnumerable<TranslationResults> results;
StringSearchResultsModelIndex modelInstance = new StringSearchResultsModelIndex();
modelInstance.getData();
return View("SearchGUIString", modelInstance);
}
данные:
public class StringSearchResultsModelIndex : IStringSearchResultsModelIndex
{
private IEnumerable<StringSearchResultModel> m_data;
private string id;
public IEnumerable<StringSearchResultModel> getData()
{
List<StringSearchResultModel> models = new List<StringSearchResultModel>();
StringSearchResultModel _sModel = new StringSearchResultModel();
for (int i = 1; i < 11; i++)
{
_sModel = new StringSearchResultModel();
_sModel.fileLocation = "Location" + i;
_sModel.refId = "refID" + i;
_sModel.results = "results" + i;
models.Add(_sModel);
}
m_data = models;
return models;
}
public IEnumerable<StringSearchResultModel> data { get { return m_data; } set { m_data = value; } }
public string SelectedRowID {get {return id ; } set { id = value; } }
}
Когда я нажимаю кнопку редактирования в ActionLink, меня перенаправляют на страницу /search/Edit, я понимаю, что мне нужно иметь некоторый код в контроллере для //search/Edit, но я не получаю текстовое поле, в котором я могу редактировать текст в результате ячейка. Я новичок в MVC, может кто-нибудь направить меня туда, куда я должен идти отсюда, какие-либо предложения?
1 ответ
Скорее всего, это сравнение всегда возвращает false: item => (Model.data == item)
, Это предотвратит отображение окна редактирования.
Попробуйте переписать сравнение как сравнение между простыми значениями (например, id) или реализовать Equals для вашего класса данных и использовать его вместо ==
[Обновить]
Сравнение используется для определения того, какие строки должны отображаться в режиме редактирования, где true
означает "визуализировать строку в режиме редактирования".
Скажем, вы хотите отредактировать строку, соответствующую элементу с заданным идентификатором. Ваше сравнение будет выглядеть примерно так item => item.Id == Model.SelectedRowId
,
В вашем контроллере вы бы сделали что-то вроде этого:
public ActionResult Edit(string id)
{
var model = new StringSearchResultsModelIndex();
model.getData();
model.SelectedRowId = id;
return View("SearchGUIString", model);
}
Обратите внимание, что вам нужно добавить SelectedRowId
Свойство для вашего вида модели класса.
Кстати, я бы порекомендовал вам не позволять вашей модели представления загружать свои собственные данные в getData()
метод. Модель представления должна быть не более чем контейнером, который вы используете для передачи данных из вашего контроллера в ваше представление. Ввод данных в модель представления является обязанностью контроллера.