ASP.NET MC3 - единый интерфейс для создания записи и вспомогательных записей - PullRequest
0 голосов
/ 24 октября 2011

У меня есть начало приложения ASP.NET MVC3, которое должно реализовывать планирование. В моей модели есть следующее:

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 за одно действие. У кого-нибудь есть идеи?

Andrew

(Спасибо, что читаете)


По запросу контроллер был:

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

Теперь я понимаю, что мне нужно создать модель представления, которая будет охватывать как мой класс расписания, так и массив строк. Я создам расписание, а затем переберу массив строк и создам объекты TimeofDay

Ответы [ 2 ]

0 голосов
/ 25 октября 2011

Я попытался создать модель представления для поддержки этого, расширив мою модель следующим образом:

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

Затем я изменил свое мнение, изменив:

@model scheduler.Models.Schedule

до:

@model scheduler.Models.ScheduleCreate

Я дополнительно изменил всю модель. (Параметр) на 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 голосов
/ 24 октября 2011

для входных данных для привязки к временным коллекциям поля формы должны иметь индексированные имена, такие как

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 - мой любимый, поскольку он очень просто объясняет, как можно использовать непоследовательные индексы для привязки списка. Для получения дополнительной ссылки, пожалуйста, посмотрите на мой ответ на этот вопрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...