不能存储在不同表的值在数据库中
问题描述:
这是我的赞助商模式不能存储在不同表的值在数据库中
public enum PaymentType
{
Cash,
CreditCard,
Cheque
}
public class SponsorDetail
{
public int Id { get; set; }
public Orphan Orphan { get; set; }
public int OrphanId { get; set; }
public User User { get; set; }
public int UserId { get; set; }
public PaymentType PaymentType{ get; set; }
public int PaymentNo { get; set; }
public DateTime DateOfReceipt { get; set; }
}
这是孤儿模型
public class Orphan
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
public string Gender { get; set; }
public bool Disable { get; set; }
public DateTime JoinedDate { get; set; }
public DateTime? LeaveDate { get; set; }
public Supervisor Supervisor { get; set; }
public string SupervisorName { get; set; }
public string Picture { get; set; }
}
这是孤儿控制器
public class OrphanController : DatabaseController
{
public ActionResult Index()
{
return View(db.Orphans.ToList());
}
public ActionResult Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Orphan orphan = db.Orphans.Find(id);
if (orphan == null)
{
return HttpNotFound();
}
return View(orphan);
}
public ActionResult Sponsor(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
if (Session["UserId"] != null)
{
ViewBag.OrphanId = id;
ViewBag.UserId = Session["UserId"];
}
return View();
}
[HttpPost]
public ActionResult Sponsor(SponsorDetail sponsor,int? id)
{
if (ModelState.IsValid)
{
ViewBag.OrphanId = id;
ViewBag.UserId = Session["UserId"];
db.SponsorDetails.Add(new SponsorDetail()
{
OrphanId =(int) ViewBag.OrphanId,
UserId=(int)ViewBag.UserId,
PaymentType = sponsor.PaymentType,
PaymentNo =sponsor.PaymentNo,
DateOfReceipt = DateTime.Now
});
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.OrphanId = new SelectList(db.Orphans, "Id", "FirstName",sponsor.OrphanId);
return View(sponsor);
}
}
我添加了一个我的索引视图的孤儿赞助者按钮
@Html.ActionLink("Sponsor", "Sponsor",new { id= item.Id })
赞助商的用于用户标识的视图和orphanid
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.OrphanId, "OrphanId", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.Editor("OrphanId", new { htmlAttributes = new { @class = "form-control", disabled = "disabled" } })
@Html.ValidationMessageFor(model => model.OrphanId, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.UserId, "UserId", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.Editor("UserId", new { htmlAttributes = new { @class = "form-control", disabled = "disabled"} })
@Html.ValidationMessageFor(model => model.UserId, "", new { @class = "text-danger" })
</div>
</div>
点击赞助按钮之后其移动到赞助孤儿controller.Since的动作的孤儿ID是从索引视图和用户ID传递的值而获得是从会话中获得的。它在孤儿的Get方法中显示,但在发起者的后期操作中,它不存储数据库中的值。帮助我如何将它存储在数据库中?
答
我做了这些改变,它的工作谢谢大家帮助我。
public ActionResult Sponsor(int? id)
{
if (Session["UserId"] != null)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
else
{
ViewBag.OrphanId = id;
ViewBag.UserId = Session["UserId"];
}
}
else
{
return RedirectToAction("Login", "Login");
}
return View();
}
[HttpPost]
public ActionResult Sponsor(SponsorDetail sponsor,int? id)
{
if (ModelState.IsValid)
{
db.SponsorDetails.Add(new SponsorDetail()
{
OrphanId = sponsor.OrphanId,
UserId=sponsor.UserId,
PaymentType = sponsor.PaymentType,
PaymentNo =sponsor.PaymentNo,
DateOfReceipt = DateTime.Now
});
db.SaveChanges();
ViewBag.Message = "Successful";
return RedirectToAction("Index");
}
ViewBag.OrphanId = new SelectList(db.Orphans, "Id", "FirstName",sponsor.OrphanId);
return View(sponsor);
}
答
避免从控制器中的ViewBag中读取值。 ViewBag只是可以在控制器和视图之间交换的数据集合。你的赞助方法应该是这样的:
[HttpPost]
public ActionResult Sponsor(SponsorDetail sponsor,int? id)
{
if (ModelState.IsValid)
{
ViewBag.OrphanId = id;
ViewBag.UserId = Session["UserId"];
db.SponsorDetails.Add(new SponsorDetail()
{
OrphanId =(int)id,
UserId= Convert.ToInt32(Session["UserId"]),
PaymentType = sponsor.PaymentType,
PaymentNo =sponsor.PaymentNo,
DateOfReceipt = DateTime.Now
});
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.OrphanId = new SelectList(db.Orphans, "Id", "FirstName",sponsor.OrphanId);
return View(sponsor);
}
此外,你没有返回任何赞助商的观点。如果你没有返回它,你将如何管理你的模型。 我会用这样的:
public ActionResult Sponsor(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
if (Session["UserId"] != null)
{
ViewBag.OrphanId = id;
ViewBag.UserId = Session["UserId"];
//you need to fill the sponsorModel here an return it back in the view
}
return View(sponsorModel);
}
你会得到什么异常?它发回服务器? –
已禁用的控件不回发一个值。 –
而且在任何情况下,您都无法从POST方法中的'ViewBag'中读取值 - 这仅用于将值从控制器传递到视图。 –