c# - ViewBag 不保存状态
问题描述
我测试了我的应用程序,在测试时我发现了一个错误,我认为它来自 ViewBage。我有 500 名医生和专业的列表,当我想编辑电话、地址等时,下拉菜单会显示列表中第一个的 SpeciltyName,因此它不会保存医生的 SpeciltyName 你可以查看下面的图片以更好地理解
联系人控制器.cs
// GET: Contacts/Edit/5
public async Task<ActionResult> Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Contact contact = await db.Contacts.FindAsync(id);
if (contact == null)
{
return HttpNotFound();
}
ViewBag.TypeId = new SelectList(db.ContactTypes, "Id", "Name", contact.TypeId);
ViewBag.CategoryId = new SelectList(db.ContactCategories.Where(s => s.Name != "Attorney" && s.Name != "Law Firm"), "Id", "Name", contact.CategoryId);
ViewBag.ConCompanyId = new SelectList(db.Contacts.Where(s => s.ContactCategory.Name == "Insurance Carrier" || s.ContactCategory.Name == "Facility"), "Id", "Firstname");
return View(contact);
}
// POST: Contacts/Edit/5
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Edit([Bind(Include = "Id,UserId,Title,Firstname,Lastname,isCompany,CategoryId,TypeId,DateOfBirth,Address1,Address2,City,State,Zip,Email,Mobile,Phone,Website,Country,LocationGPS,Gender,Notes,Latitude,Longitude")] Contact contact)
{
if (ModelState.IsValid)
{
db.Entry(contact).State = EntityState.Modified;
await db.SaveChangesAsync();
return RedirectToAction("Index");
}
//ViewBag.Title = new SelectList(new[] { "Mr.", "Ms." }, contact.Title);
ViewBag.TypeId = new SelectList(db.ContactTypes, "Id", "Name", contact.TypeId);
ViewBag.CategoryId = new SelectList(db.ContactCategories.Where(s => s.Name != "Attorney" && s.Name != "Law Firm"), "Id", "Name", contact.CategoryId);
ViewBag.ConCompanyId = new SelectList(db.Contacts.Where(s => s.ContactCategory.Name == "Insurance Carrier" || s.ContactCategory.Name == "Facility"), "Id", "Firstname");
return View(contact);
}
有什么帮助吗?
解决方案
ViewBag 值仅适用于当前请求。viewbag 代码确实被重定向到异步任务以设置 ViewBag 的值。因此,为 ViewBag 设置的值将与该请求一起消失。解决方案:如果您在相应的 ActionResult 而不是共享函数中设置 ViewBag 的值,那么它将继续存在并且您将在视图中获得该值。
您可以改用 TempData。TempData 在内部使用 Session 来存储值。 请检查此链接
推荐阅读
- angular - 使用 Mapbox 画线时如何修复类型错误
- angular - 在 Angular 上使用 lodash 过滤对象数组
- google-apps-script - 如何更新吐司文本而不是绘制新吐司
- reactjs - 使用 redux-observable 和 rxjs 6 获取新的访问令牌并重试操作?
- apache-spark - 在 pyspark 中读取镶木地板文件时 where 子句中的动态列
- r - 根据通过混淆变量调整的连续变量预测疾病概率
- azure - 将一些属性从 azure alerts 发送到 slack
- excel - .NullString 属性在输出中将“-”显示为 0 的问题
- postgresql-9.6 - Postgres - 至少获得 2 个计数
- mysql - 找出每个站点访问过至少两个不同国家的唯一用户数