【发布时间】:2014-05-02 16:57:29
【问题描述】:
我有 2 个模型,employees1 和 phone_manager。 Employees1 有一个名为 employee_phone_manager 的 ICollection,其中包含具有匹配员工 ID 的所有行。
Following a tutorial online,我将这两个模型集成在一起,以便我可以从我的创建视图中动态添加和删除项目。在我的编辑视图中,我可以编辑或删除电话号码,但不能添加。我发现的第一件事是员工 ID 没有填充到动态添加的项目上,因此我修改了 HTML 帮助程序以插入正确的员工 ID,这纠正了我遇到的关于外键约束和参照完整性约束的问题。但是,它似乎实际上并没有将项目插入到集合中。
这是我的编辑控制器的邮政编码:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "employee_id,assigned_id,all_id,first_name,last_name,birth_day,gender,social,address_line_1,address_line_2,city,state,zip,hire_date,termination_date,emergency_contact_name,emergency_contact_phone,notes,employee_phone_manager")] employees1 employees1)
{
if (ModelState.IsValid)
{
db.Entry(employees1).State = EntityState.Modified;
db.SaveChanges();
foreach (var item in employees1.employee_phone_manager)
{
if (item.phone_id == 0 && !item.deleted)
{
db.phone_manager.Add(item);
}
else if (item.phone_id != 0)
{
db.Entry(item).State = EntityState.Modified;
db.SaveChanges();
}
}
return RedirectToAction("Index");
}
ViewBag.phonetype = new SelectList(db.phone_types, "phone_type_id", "phone_type_name");
ViewBag.all_id = new SelectList(db.all_employees, "all_id", "all_id", employees1.all_id);
return View(employees1);
}
我的观点
<div class="box border blue">
<div class="box-title">
<h4><i class="fa fa-phone"></i>Phone Number</h4>
<div class="tools">
<a href="javascript:;" class="collapse">
<i class="fa fa-chevron-up"></i>
</a>
@Html.RemoveLink("<i class=\"fa fa-times\"></i>", "div.phoneNumber", "input.mark-for-delete")
</div>
</div>
<div class="box-body">
@Html.HiddenFor(x => x.phone_id)
@Html.HiddenFor(x => x.employee_id)
<div class="form-group">
@Html.LabelFor(x => x.phone_type, new { @class = "control-label col-md-3" })
@Html.DropDownListFor(x => x.phone_type, (SelectList)ViewBag.phonetype, new { @class = "form-control" })
</div>
<div class="form-group">
@Html.LabelFor(x => x.phone_number, new { @class = "control-label col-md-3" })
@Html.TextBoxFor(x => x.phone_number, new { @class = "phone form-control", size = "10" })
</div>
<div class="form-group">
@Html.LabelFor(x => x.phone_extension, new { @class = "control-label col-md-3" })
@Html.TextBoxFor(x => x.phone_extension, new { size = "4", @class = "form-control" })
</div>
@Html.HiddenFor(x => x.date_added, new { @Value = System.DateTime.Now })
@Html.HiddenFor(x => x.deleted, new { @class = "mark-for-delete" })
</div>
</div>
还有 HTML 助手
public static IHtmlString AddLink<TModel>(this HtmlHelper<TModel> htmlHelper, string linkText, string containerElement, string counterElement, string collectionProperty, Type nestedType, string empID = "0")
{
var ticks = DateTime.UtcNow.Ticks;
var nestedObject = Activator.CreateInstance(nestedType);
var partial = htmlHelper.EditorFor(x => nestedObject).ToHtmlString().JsEncode();
partial = partial.Replace("id=\\\"nestedObject", "id=\\\"" + collectionProperty + "_" + ticks + "_");
partial = partial.Replace("id=\\\"nestedObject", "id=\\\"" + collectionProperty + "_" + ticks + "_");
partial = partial.Replace(".employee_id\\\" type=\\\"hidden\\\" value=\\\"0", ".employee_id\\\" type=\\\"hidden\\\" value=\\\"" + empID);
var js = string.Format("javascript:addNestedForm('{0}','{1}','{2}','{3}');return false;", containerElement, counterElement, ticks, partial);
TagBuilder tb = new TagBuilder("a");
tb.Attributes.Add("href", "#");
tb.Attributes.Add("onclick", js + ";addMasks();");
tb.Attributes.Add("class", "addNewItemsLink");
tb.InnerHtml = linkText;
var tag = tb.ToString(TagRenderMode.Normal);
return MvcHtmlString.Create(tag);
}
private static string JsEncode(this string s)
{
if (string.IsNullOrEmpty(s)) return "";
int i;
int len = s.Length;
StringBuilder sb = new StringBuilder(len + 4);
string t;
for (i = 0; i < len; i += 1)
{
char c = s[i];
switch (c)
{
case '>':
case '"':
case '\\':
sb.Append('\\');
sb.Append(c);
break;
case '\b':
sb.Append("\\b");
break;
case '\t':
sb.Append("\\t");
break;
case '\n':
break;
case '\f':
sb.Append("\\f");
break;
case '\r':
break;
default:
if (c < ' ')
{
string tmp = new string(c, 1);
t = "000" + int.Parse(tmp, System.Globalization.NumberStyles.HexNumber);
sb.Append("\\u" + t.Substring(t.Length - 4));
}
else
{
sb.Append(c);
}
break;
}
}
return sb.ToString();
}
}
非常感谢任何帮助!谢谢!
【问题讨论】:
标签: c# javascript asp.net-mvc entity-framework