2017-08-15 103 views
0

这是我的赞助商模式不能存储在不同表的值在数据库中

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方法中显示,但在发起者的后期操作中,它不存储数据库中的值。帮助我如何将它存储在数据库中?

+0

你会得到什么异常?它发回服务器? –

+0

已禁用的控件不回发一个值。 –

+1

而且在任何情况下,您都无法从POST方法中的'ViewBag'中读取值 - 这仅用于将值从控制器传递到视图。 –

回答

0

我做了这些改变,它的工作谢谢大家帮助我。

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); 


} 
0

避免从控制器中的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); 
      } 
相关问题