2014-04-25 3 views
1

ViewModel을 사용하여 DB에 새 항목을 만듭니다. ViewModel에는 사용자가 설정할 수있는 속성 만 있고 게시되면 다시 만듭니다. 새로운 '실제'객체를 저장하고 DB에 저장하십시오.원하지 않는 기본값을 설정하여 ViewModel을 사용하여 항목 만들기

[HttpGet] 
public ActionResult Create(int id = 0) 
{ 
    var opt = unitOfWork.OptionRepository.GetByID(id); 

    CreateAvailabilityViewModel model = new CreateAvailabilityViewModel(); 
    model.OptionDescription = opt.Description; 
    model.CentreCode = opt.CentreCode; 
    model.OptionID = id; 

    return View(model); 
} 

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Create(CreateAvailabilityViewModel cavm) 
{ 
    if (ModelState.IsValid) 
    { 
     OptionAvailability newOA = new OptionAvailability(); 
     DateTime now = DateTime.Now; 

     newOA.ChangedDate = newOA.CreatedDate = now; 
     newOA.ChangedBy = newOA.CreatedBy = User.Identity.Name; 

     newOA.DateFrom = cavm.DateFrom; 
     newOA.DateTo = cavm.DateTo; 
     newOA.MinNumbers = cavm.MinNumbers; 
     newOA.MaxNumbers = cavm.MaxNumbers; 
     newOA.OptionID = cavm.OptionID; 

     unitOfWork.OptionAvailabilityRepository.Insert(newOA); 
     unitOfWork.Save(); 

     return RedirectToAction("Detail", "Option", new { id = newOA.OptionID }); 
    } 

    return View(cavm); 
} 

아래에 설명이이 뷰 모델

public class CreateAvailabilityViewModel 
{ 
    [HiddenInput(DisplayValue = false)] 
    public int OptionAvailabilityID { get; set; } 
    [HiddenInput(DisplayValue = false)] 
    public int OptionID { get; set; } 
    [Required] 
    public DateTime DateFrom { get; set; } 
    [Required] 
    public DateTime DateTo { get; set; } 
    [Required] 
    public int MinNumbers { get; set; } 
    [Required] 
    public int MaxNumbers { get; set; } 
    public string CentreCode { get; set; } 
    public string OptionDescription { get; set; } 
} 

내가 직면하고있는 문제는 그 형태가 날짜를 양식 필드를 렌더링 할 때와 같이

나는이 일을하고있다 ints는 기본값 인 01/01/0001이고 공백이 아닌 0입니다. Html.EditorFor 도우미를 사용하여 입력을 렌더링하는 중입니다. HttpGet Create 메서드에서 ViewModel을 인스턴스화 할 때 형식 기본값을 사용하고 폼에 개체를 통해 전달하기 때문에 가정합니다. 그러나 이것은 아닙니다. 무슨 일이 일어나고 싶습니까?이 속성들을 DateTime? 및/또는 int?으로 설정해야합니까?

enter image description here

나는이 사용하는 것이 좋습니다 확신하지만 조금 사람이 내가 muchly

답변

0

당신이 날짜를 인스턴스화 할 수 잘못 감사하십시오 뭐하는 거지 설명 할 수있는 이유에 난처한 상황에 빠진입니다 네가 원하는 모든 가치.

당신은 (대신 자동 등록) 귀하의 ViewModel에 백업 필드를 사용하고이를 초기화 할 수 있습니다 :

public class MyViewModel 
{ 
    private DateTime _firstDate = new DateTime(12/12/2012); 
    private DateTime _secondDate = DateTime.Now(); 

    public DateTime FirstDate { get { return _firstDate; } set { _firstDate = value; } } 
    ... 
}

을 아니면 뷰 모델의 생성자를 초기화 할 수 있습니다 :

public class MyViewModel 
{ 
    public MyViewModel(DateTime firstDate) 
    { 
     FirstDate = firstDate; 
     SecondDate = DateTime.Now(); 
    } 

    public DateTime FirstDate { get; set; } 
    .... 
}

또는 초기화 할 수 당신의 컨트롤러에있는 그것들; 당신은 아마 아이디어를 얻습니다.

또한 메타 데이터로이 멤버를 장식 고려 : 내가 그들을 공백되고 싶어, 답장을 보내

[DataType(DataType.Date)] 
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] 
public DateTime FirstDate { get; set; }
+0

안녕하세요, 감사합니다,하지만 난 모든 기본을 가지고 싶지 않아 .. 달성이 아닙니다 ? – nat

+0

nullable ...으로 속성을 설정하는 것 외에도 ... – nat

+0

적절한 날짜/datetime 컨트롤은 물론 브라우저에 따라 다르며 내가 알 수있는 한 date> datetime에 대한 적절한 기본값은 약간 흐릿합니다. null/공백이 의미 상으로 유효한지 여부). 이 시점에서 접근법은 예측할 수 없을 것입니다. 바닐라 텍스트 입력을 출력하는 경우 페이지가로드 될 때 javascript를 사용하여 값을 지울 수 있습니다. 별도의 GET/POST 뷰 모델은 과도한 것처럼 보입니다. –