Asp.net mvc MVC、UpdateModel或delete取决于表单字段值?
我对这方面还不熟悉,所以非常感谢您的帮助 我将使用Dinners/RSVPs关系来详细说明我的问题。一顿饭有很多副作用。 在我的晚餐编辑页面/视图中,我希望能够编辑晚餐信息和RSVPs信息 根据James S给出的答案,我让这部分工作:Asp.net mvc MVC、UpdateModel或delete取决于表单字段值?,asp.net-mvc,updatemodel,Asp.net Mvc,Updatemodel,我对这方面还不熟悉,所以非常感谢您的帮助 我将使用Dinners/RSVPs关系来详细说明我的问题。一顿饭有很多副作用。 在我的晚餐编辑页面/视图中,我希望能够编辑晚餐信息和RSVPs信息 根据James S给出的答案,我让这部分工作: int i = 0; foreach (var r in Dinner.RSVPs) { UpdateModel(r, "Dinner.RSVPs[" + i++ + "]"); } 但是,如果我想根据用户单击编辑视图上RSVP旁边的复选框来删除RSVP
int i = 0;
foreach (var r in Dinner.RSVPs) {
UpdateModel(r, "Dinner.RSVPs[" + i++ + "]");
}
但是,如果我想根据用户单击编辑视图上RSVP旁边的复选框来删除RSVP,该怎么办?类似于“编辑”视图中的内容:
<% int i = 0;
foreach (var rsvp in Model.RSVPs){%>
<%=Html.CheckBox("RemoveRSVP[" + i + "]") %>
<%= Html.TextBox("Dinner.RSVPs[" + i + "].Name", rsvp.Name) %>
<% i++;
}%>
我无法使用UpdateModel删除/删除RSVP,可以吗
如果有什么不清楚的地方,请告诉我
谢谢。我对NerdDinner代码不太熟悉,但他们的后端不是使用Linq to SQL吗?如果是这样的话,我认为您可以用传统的web方法解决这个问题,并将记录ID附加到要删除的项目列表中每个复选框的值中。然后,您可以捕获服务器端的ID集合,并通过将实体的选择查询传递给delete调用来执行deleteAllonsSubmit?如果你需要更多细节,请告诉我 我试过这个,但显然不起作用:
Dinner dinner = dinnerRepository.GetDinner(id);
int i = 0;
foreach (var r in dinner.RSVPs) {
if (Boolean.Equals(RemoveRSVP[i], true){
dinner.RSVPs.Remove(r);
else
UpdateModel(r, "Dinner.RSVPs[" + i+ + "]");
i++;
}
你真的很难通过删除吗?还是在处理表单时检测哪些应该删除?e、 g.哪一行不起作用:
dinner.RSVPs.Remove(r);
或
?
一
如果您的存储库由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" />
我无法使用UpdateModel删除/删除RSVP,可以吗
UpdateModel的目的是自动将属性值从发布表单复制到现有对象上,而不是创建新实体或销毁现有实体。所以不,不是真的。这不是预期的行为。事实上,我对两者都有问题。第一部分我已经修好了。如果它实际上不删除任何东西,那么删除又有什么好处呢?我认为这个想法是一个实体有它自己的独立生存期,所以简单地改变另一个实体的属性不应该导致第一个实体被删除。但是,您可以表示希望发生这种情况。我已经编辑了我的回复,包括如何做到这一点。@johnycakes有什么进展吗?您有机会尝试这两种解决方案吗?
<Association Name="..." ... DeleteOnNull="true" />
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
}