2011-10-24 97 views
0

我有一個應該實現調度的ASP.NET MVC3應用程序的開始。我已經在我的模型如下:ASP.NET MC3 - 創建記錄和支持記錄的單個接口

public class Schedule 
{ 
    public int ScheduleID { get; set; } 
    public bool isDisabled { get; set; } 
    [DisplayName("For Delivery")] 
    public bool isDeliver { get; set; } 
    public int Count { get; set; } 
    public virtual ICollection<TimeofDay> Times { get; set; } 
    public virtual Location Location { get; set; } 
    public int Week { get; set; } 
    public int weekday { get; set; } 
} 

public class TimeofDay 
{ 
    [Key] 
    public int TimeID {get;set;} 
    public DateTime Time { get; set; } 
} 

模型應該接受0個或更多天的實體的時候,我通過使用JavaScript來創建一個新的輸入字段:

function createtimefield() { 
    var TimeDiv = document.getElementById('timefields'); 
    var newDivInput = document.createElement("input"); 
    newDivInput.name = "Times"; 
    idText="Time" + GLOBAL_timeDivIdCount++; 
    newDivInput.id = idText; 
    newDivInput.value = "12:00 am"; 

    TimeDiv.appendChild(newDivInput); 

} 

我的控制器將工作文件接受傳遞的數據,直到我將數據添加到時間字段。這應該會在TimeofDay表中創建由模型生成的新實體,並鏈接回ScheduleID。我不希望兩個接口輸入這個簡單的數據,但似乎無法找到在單個操作中用MVC3創建兩個實體的方法。有人有主意嗎?

安德魯

(謝謝您的閱讀)


按照要求控制器是:

public ActionResult Create(Schedule schedule, string[] schedTimes) 
    { 
     if (ModelState.IsValid) 
     { 
      Schedule newschedule = db.Schedule.Add(schedule); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
     ...... 
    } 

我現在意識到我需要創建將包括視圖模型我的兩個時間表類和字符串數組。我將創建時間表,然後通過字符串數組進行迭代,並創建TIMEOFDAY對象

+0

能否請你添加的代碼片段爲您'Controller'或使其更翔實的? –

+0

您是否在控制器中直接使用實體框架或DAL?這在你創建從MVC/UI層到DAL的依賴關係時並不好。看到我的答案在這裏:http://stackoverflow.com/questions/7474267/mvc3-and-entity-framework/7474357#7474357 –

+0

第一塊代碼是在我的模型,因爲是EF。有沒有更好的辦法? – Andrew

回答

0

的投入與時間收集綁定烏爾表單字段需要,當你這樣做有可能已經收錄像

Times[0].TimeID // this would probably be hidden field 
Times[0].Time 
Times[1].TimeID 
Times[1].Time 
. 
. 
Times[n].TimeID 
Times[n].Time 

名當從中間刪除行時會出現其他問題。這裏有很多博客文章。菲爾haack's post是我的最愛,因爲它以非常簡單的方式解釋瞭如何爲列表綁定指定非序列索引。對於更多的鏈接,請看看我的答案this question

+0

是的,那是昨晚在夢中遇到的事情:我可能需要將它作爲一個數組引用。我將按如下所示修改Javascript:newDivInput。name =「Times [」+ GLOBAL_timeDivCount +「]」; – Andrew

0

我試圖創建一個視圖模型通過擴展我的模型來支持這個如下:

@model scheduler.Models.Schedule 

public class ScheduleCreate 
{ 
    public Schedule schedule {get;set;} 
    public string[] schedTimes {get;set} 
} 

然後我通過改變修改我的看法

到:

@model scheduler.Models.ScheduleCreate 

我另外改變了所有的模式的。L(參數)model.schedule(參數)

然後,我改變了我的控制器:

public ActionResult Create(ScheduleCreate mod) 
    { 
     if (ModelState.IsValid) 
     { 
      Schedule newschedule = db.Schedule.Add(mod.schedule); 
      if (mod.schedTime != null) 
      { 
       foreach (string instanceTime in mod.schedTimes) 
       { 
       newschedule.Times.Add(new {Time = DateTime.Parse(instanceTime) }); // unteseted 
       } 
      } 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
     PopulateDropDown(); 
     return View(mod.schedule); 

} 
+0

請向我們展示您的觀點。 – slapthelownote

+0

事實證明,我應該使用Schedule類的構造函數來將Times定爲列表。 – Andrew