У меня есть Gridview со списком производителей, связанных с производителями ... Таким образом, у каждого производителя есть Производитель (2 таблицы -> 2 объекта). Когда я хочу обновить элемент ManufacturerType, я могу обновить Title из Entity ManufacturerType, но также изменить отношение (Производитель), если выпадающее меню выбрано значение change..NET 4.5 Gridview с DropDownList в EditItemTemplate UpdateMethod
<asp:GridView ID="gvManufacturerTypes" runat="server" DataKeyNames="manufacturerTypeId"
AutoGenerateColumns="false" GridLines="Vertical" CssClass="gridview"
CellPadding="4" ItemType="Entities.Models.ManufacturerType" SelectMethod="GetManufacturerTypesWithParams"
UpdateMethod="UpdateItem" DeleteMethod="DeleteItem"
AllowPaging="true" AllowSorting="true" PageSize="20" PagerSettings-FirstPageText="Prvi"
PagerSettings-LastPageText="Zadnji" PagerSettings-Mode="NumericFirstLast"
OnCallingDataMethods="gvManufacturerTypes_CallingDataMethods">
<Columns>
<asp:TemplateField HeaderText="Proizvajalec">
<ItemTemplate>
<asp:Label ID="lblManufacturer" Text='<%# Item.Manufacturer.Title %>' runat="server" />
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="ddlManufacturers" runat="server" ItemType="Entities.Models.Manufacturer" SelectMethod="GetManufacturers" SelectedValue='<%# Item.Manufacturer.ManufacturerId %>'
DataTextField="Title" DataValueField="manufacturerId" OnCallingDataMethods="ddlManufacturers_CallingDataMethods">
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>
<asp:DynamicField DataField="Title" />
<asp:CommandField ShowEditButton="true" EditText="Uredi" UpdateText="Shrani" CancelText="Prekliči" ItemStyle-Width="80" />
<asp:CommandField ShowDeleteButton="true" DeleteText="Izbriši" ItemStyle-Width="80" />
</Columns>
<PagerStyle CssClass="gridview_pager" />
</asp:GridView>
Он генерирует меня UpdateItem метод и изменить пункт загрузки и сохраните изменения разделов, как показано ниже:
// The id parameter name should match the DataKeyNames value set on the control
public void UpdateItem(int manufacturerTypeId, ModelMethodContext context)
{
ManufacturerType item = null;
// Load the item here
item = _manufacturerTypeRepository.GetAllWithRelations(m => m.Manufacturer)
.Where(x => x.ManufacturerTypeId == manufacturerTypeId).SingleOrDefault();
if (item == null)
{
// The item wasn't found
context.ModelState.AddModelError("", String.Format("Proizvajalec z idjem {0} ne obstaja.", manufacturerTypeId));
return;
}
context.TryUpdateModel(item);
if (context.ModelState.IsValid)
{
// Save changes here
_manufacturerTypeRepository.Save();
}
}
Я также призываю Включать где я получаю ManufacturerType объект с Include («Производитель») ... поэтому я получаю текущий тип ManufacturerType, и метод TryUpdateModel также изменяет Title of ManufacturerType (если я его изменяю при редактировании в gridview), но Производитель всегда остается прежним ... Я также пытаюсь поместить dropdownlist в качестве элемента управления -параметр к методу UpdateMethod, например
public void UpdateItem(int manufacturerTypeId, [Control] manufacturerId, ModelMethodContext context)
но это всегда значение null ... Поэтому я не знаю, как перевести значение из раскрывающегося списка на метод UpdateItem (UpdateItem не находится в коде производителя ManufacturerTypes.aspx, но он находится в логическом слое бизнес-процессов) ManufacturerTypeBL.cs .. .
I `t didn найти решение для этого, которые будут использовать новые функции, такие как ItemType в GridView и Select метода и SelectMethod в DropDownList и т.д ...
Может быть, мне нужно изменить метод UpdateItem со старым fasioned способом OnUpdating метод и прочитать значения из выпадающего меню и наложения на логический уровень бизнес-процессов с параметрами?
EDIT -> добавить модель классов (Производитель, ManufacturerType)
public class Manufacturer
{
[Key, ForeignKey("ManufacturerType")]
public int ManufacturerId { get; set; }
[StringLength(255)]
public string Title { get; set; }
public ManufacturerType ManufacturerType { get; set; }
}
public class ManufacturerType
{
[Key]
public int ManufacturerTypeId { get; set; }
[StringLength(50)]
public string Title { get; set; }
public Manufacturer Manufacturer { get; set; }
}
Ваш груз из хранилища содержит правильный объект «Производитель»? – DrewJordan
Да, объект «Производитель» не имеет значения null, но TryUpdateModel обновляет объект ManufacturerType, но не Производитель ... Я вижу, что MVC имеет метод TryUpdateModel с дополнительными параметрами, где вы можете установить, что вы хотите обновить некоторые другие объекты также (которые), но как насчет в webforms? Кажется, что мне нужно использовать другой подход для обновления Entity с отношениями ... Специальный метод обновления с параметрами обновления, установленными в OnItemUpdating, например ... – janilemy