2016-01-07 81 views
0

我有以下看法,并形成一些原因,下面的行会导致OrderID不是订单的属性的错误。但它绝对是。Knockoutjs和窗体绑定

<td>@Html.DisplayFor(model => model.OrderID)</td> 

这里我只想让用户选择,然后显示每张门票类型的吞吐此,与OrderID和TicketID一起回控制器上的按钮,点击视图

@model IEnumerable<GeogSocSite.Models.Order> 
<head> 
<title>Order</title> 
<link rel="stylesheet" href="~/Content/TableSheet.css"> 

</head> 
<body> 
<h1>Choose Your Tickets</h1> 
<p> Hello</p> 
<form action="@Url.Action("NextPage", "Order")" method="get"> 

    <table align="center" cellspacing="2" border="1" table data-bind='visible: gifts().length>0'> 

     <thead> 
      <tr> 
       <th align="center">Description</th> 
       <th align="center">Price</th> 
       <th align="center">Add</th> 
      </tr> 
     </thead> 
     <tbody data-bind="foreach : gifts"> 

      @foreach (GeogSocSite.Models.Ticket ticket in ViewBag.listTickets) 
      { 
       <tr> 
        <td data-bind="text: ticketID">@Html.DisplayFor(m => ticket.TicketID)</td> 
        <td>@Html.DisplayFor(model => model.OrderID)</td> 
        <td align="center">@ticket.Description</td> 
        <td align="center">@ticket.Price</td> 
        <td align="center"> @Html.DropDownList("Quantity", (IList<SelectListItem>)ViewBag.Quantities, "", new { data_bind = " value: selectedOptionValue" }) </td> 
       </tr> 
      } 
     </tbody> 
    </table> 
    <button data-bind='click: addGift'>Add Gift</button> 
    <button data-bind='enable: gifts().length > 0' type='submit'>Submit</button> 
</form> 
    <div> 
     <button data-bind="click: next">Next </button> 
    </div> 
    <div id="proceed"> 
     @Html.ActionLink("Proceed", "Order", "Order") 
    </div> 
    <div> 
     @Html.ActionLink("Back to List", "Index", "Events") 
    </div> 
    <script type="text/javascript"> 
     var GiftModel = function (gifts) { 
      var self = this; 
      self.gifts = ko.observableArray(gifts); 


      self.save = function (form) { 
       alert("Could now transmit to server: " + ko.utils.stringifyJson(self.gifts)); 
       // To actually transmit to server as a regular form post, write this: ko.utils.postJson($("form")[0], self.gifts); 
      }; 
     }; 

     var viewModel = new GiftModel([ 

     ]); 
     ko.applyBindings(viewModel); 

     // Activate jQuery Validation 
     $("form").validate({ submitHandler: viewModel.save }); 
    </script> 
</body> 

但我有真正的困难。这里是我的订货型号

public class Order 
{ 

    public int OrderID { get; set; } 

    //foreign key 
    [Required] 
    [ForeignKey("Event")] 
    public int EventID { get; set; } 


    [Required] 
    public DateTime OrderDate { get; set; } 

    [Required] 
    public float OrderTotal { get; set; } 

    public ApplicationUser user { get; set; } 

    public virtual Event Event { get; set; } 

    } 

这里是我的控制器方法

[AllowAnonymous] 
    public ActionResult CreateOrder(int id) 
    { 
     // Ticket ticket = new Ticket(); 
     // ticket.EventID = id; 
     // ViewBag.EventID = new SelectList(db.Events, "EventID", "Name"); 
     // return View(ticket); 
     Event e1 = db.Events.Find(id); 
     List<SelectListItem> quantities = new List<SelectListItem>(); 
     ViewBag.listTickets = (from t in db.Tickets where t.EventID == id select t).ToList(); 
     if (e1.TicketsAvailable == 0) 
     { 
      return View("Error"); 
     } 
     else if (e1.TicketsAvailable < 5) 
     { 
      for (int loop = 0; loop < e1.TicketsAvailable; loop++) 
      { 
       quantities.Add(new SelectListItem { Text = loop.ToString(), Value = loop.ToString() }); 
      } 
     } 
     else 
     { 
      for (int loop = 0; loop <= 5; loop++) 
      { 
       quantities.Add(new SelectListItem { Text = loop.ToString(), Value = loop.ToString() }); 
      } 
     } 
      ViewBag.Quantities = quantities; 
      string currentUserId = User.Identity.GetUserId(); 
      ApplicationUser currentUser = db.Users.FirstOrDefault(x => x.Id == currentUserId); 
      Order order = new Order { EventID = e1.EventID, OrderDate = DateTime.Now, user=currentUser }; 
      return View(); 

     } 

    } 

我完全卡在什么可能是一个简单的任务要做,但因为我是新来asp.net的MVC和knockoutjs我发现很难完成。任何帮助将不胜感激!谢谢

回答

2

问题在于,您的视图模型是IEnumerable <订单>而不是订单。相反,您应该将模型更改为@model GeogSocSite.Models.Order。

+0

非常感谢您解决我的构建错误!你有什么想法为什么OrderID是空的,因为我认为我传递了一个新的订单到视图和ID会自动生成?再次感谢您的帮助@Inari – CatherineG

+0

为了将模型传递到您的视图中,您需要将其作为参数提供给返回方法。 一个例子是 return View(model); – Inari

+0

很好,谢谢你!可能是另一个愚蠢的问题,但如果我想将所有这些数据传递给我的控制器并将其保存到我的数据库?目前,表单操作和方法已得到,我是否需要更改此@Inari? – CatherineG