Я пробовал это, но это не работает, очевидно:
Ваша трудность в том, чтобы действительно выполнить удаление? Или это при обработке формы, чтобы определить, какие из них следует удалить ? например какая строка не работает:
dinner.RSVPs.Remove(r);
или
if (Boolean.Equals(RemoveRSVP[i], true)
Для # 1
Если ваш репозиторий поддерживается Linq 2 Sql, а RSVP является сущностью, вам обычно придется вызывать DeleteOnSubmit () для удаления записи из базы данных - просто вызывая Remove () в ассоциации будет недостаточно. Вы, вероятно, добавите одно из следующего в ваш DinnerRepository, чтобы сделать это:
DinnerRepository.DeleteRsvp(RSVP item)
DinnerRepository.DeleteRsvp(Dinner dinner, RSVP rsvp)
В качестве альтернативы, если вы хотите, чтобы LINQ выполнял удаление автоматически, вы можете отредактировать DBML как XML (щелкните правой кнопкой мыши, откройте с помощью редактора XML) и добавьте следующий атрибут в ассоциацию объектов:
<Association Name="..." ... DeleteOnNull="true" />
для # 2
Обычно я создаю этот тип формы «повторяющийся флажок удаления объекта», чтобы опубликованные значения представляли собой список идентификаторов объектов, которые я хочу удалить. Для этого я использую альтернативный помощник CheckBox:
public static class HtmlExtensions
{
/// <summary>
/// Alternate CheckBox helper allowing direct specification of "name", "value" and "checked" attributes.
/// </summary>
public static string CheckBox(this HtmlHelper html, string name, string value, bool isChecked)
{
string tag = String.Format("<input type=\"checkbox\" name=\"{0}\" value=\"{1}\" {2}/>",
html.AttributeEncode(name),
html.AttributeEncode(value),
isChecked ? "checked=\"checked\" " : ""
);
return tag;
}
}
и создайте флажки так:
<%= Html.CheckBox("RemoveRsvpIds", rsvp.RsvpId.ToString(), false) %>
и использовать список следующим образом:
public ActionResult TheFormInQuestion(int dinnerId, int[] removeRsvpIds)
{
var dinner = DinnerRepository.GetDinner(dinnerId);
foreach (var rsvp in dinner.RSVPs)
{
if (removeRsvpIds.Contains(rsvp.RsvpId))
{
// Perform Delete
}
else
{
// Perform Update
}
}
// The rest
}
Я не могу удалить / удалить RSVP с помощью UpdateModel, могу ли я?
Цель UpdateModel () - автоматически копировать значения свойств из опубликованной формы в уже существующий объект, а не создавать новые или уничтожать существующие сущности. Так что нет, не совсем. Это не будет ожидаемым поведением.