2013-03-29 3 views
1

왜 편집 화면에 편집중인 값이 표시됩니까? 저장하려고하면 Edit HTTPPOST에 Null 개체가 있습니까?""값이 유효하지 않습니다.

오류 받기 내가 추적했지만 원인을 확인할 수 없습니다. 드롭 목록에 사용되는 클래스가 있으므로 AdvisoryTypeID 및 AdvisoryType 만 있습니다. 그러나 이제는 사용자가 그리드 (색인)에서 모두를보고 새로운 (만들기)를 추가하고 기존의 항목을 변경하는 (편집) 화면을 만들고 있습니다. 인덱스 화면은 DB에서 아무 문제없이 읽습니다. 편집도 마찬가지입니다. 만들기가 필요하지 않습니다.

그러나 편집과 작성 모두 HTTPPOST에서 동일한 오류를 표시합니다. 오류는 "내가 입력 한 값이 '유효하지 않음'입니다.

CONTROLLER (편집 게시물에 대한) 내가 편집 및 않는 다른 화면이를 비교 한

[Authorize] 
[HttpPost] 
public ActionResult Edit(AdvisoryTypes advisoryType) 
{ 
    try 
    { 
     if (ModelState.IsValid) //never get past this because it's null above 
etc.... 
} 

다음 "advisoryTypes"변수가 이해가 안 이유로 널 : 왜 코드가 켜져 디버깅 잘 만들고 똑같습니다 (예 : 필드 이름 제외). 나는 혼란 스럽다.

모델

public class AdvisoryTypes 
{ 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int AdvisoryTypeID { get; set; } 

    [Display(Name = "Type")] 
    [Required] 
    public string AdvisoryType { get; set; } 
} 

CONTROLLER

[Authorize] 
    public ActionResult Edit(int id = 0) 
    { 
     AdvisoryTypes advisoryType = db.AdvisoryType.Find(id); 
     if (advisoryType == null) 
     { 
      return HttpNotFound(); 
     } 

     return View(advisoryType); 
    } 

VIEW (편집을 위해 가져 오기)

model TheNewSolution.Models.AdvisoryTypes 

@{ 
ViewBag.Title = "Edit Advisory Type"; 
} 

<h2>Edit Advisory Type</h2> 
@*<br />*@ 
@using (Html.BeginForm()) { 
@Html.ValidationSummary(true) 

<fieldset> 
    <legend>Advisory</legend> 
    <table> 
     <tr> 
      <td> 
       @Html.HiddenFor(model => model.AdvisoryTypeID) 
       <div class="editor-label"> 
        @Html.LabelFor(model => model.AdvisoryType) 
       </div> 
       <div class="editor-field"> 
        @Html.EditorFor(model => model.AdvisoryType) 
        @Html.ValidationMessageFor(model => model.AdvisoryType) 
       </div> 
      </td> 
     </tr> 
    </table> 

    <p> 
     <input type="submit" value="Save" /> 
    </p> 
</fieldset> 
} 

<div> 
@Html.ActionLink("Back to List", "Index") 
</div> 

@section Scripts { 
@Scripts.Render("~/bundles/jqueryval") 
} 

PART TWO 이제 몇 가지 이상한 배경이 첫 번째 모델/컨트롤러 /이다 EF를 5에서 6 alpha3로 업데이트 한 이후로 만들었습니다 (같은 프로젝트에서 POCO 및 edmx를 이것은이 버그를 해결했습니다). 수동으로 모델을 만들었습니다. 마법사를 통해 컨트롤러를 만들려고하면 "ProjectName.Models.AdvisoryProviders에 대한 메타 데이터를 검색 할 수 없습니다."라는 오류 메시지가 나타납니다. 'System.Data.Entity.Core.Objects.ObjectContext'형식의 obect를 입력 할 수 없습니다. 'System.Data.Objects.ObjectContext'. "

결과로 다른 것을 복사/붙여 넣기하고 변경 한 다음 수동으로 내보기를 만드는 등의 작업을 수동으로 컨트롤러를 작성해야했습니다. 나는 이것 모두가 관련되어 있지만 어쩌면 의심 스럽다. 이것이 관련이 없다는 것을 입증하면 나는 이것을 제거하고 또 다른 질문으로 게시 할 것입니다.

+0

유형의 개체를 캐스팅 할 수 없습니다 ... EF6 및 EF5를 혼합하는 것 같습니다. 불행하게도 그것은 불가능합니다. 나는 MVC가 현재 EF6를 지원한다고 생각하지 않는다. – Pawel

답변

0

왜 이것이 해결되었는지는 잘 모르겠지만 여기에 제가 한 일이 있습니다. 내 앱에서 세 가지 (유형, 공급자, 카테고리)에 대해 위에서 언급 한 화면 (그리드와 색인, 생성, 편집)을 만들어야했습니다. 나는 첫 번째 유형을 입력하여 위의 문제가 발생했습니다.

"유형"화면에서 컨트롤러와 뷰를 복사하여 붙여 넣은 다음 필요에 따라 모델과 필드 이름을 변경하여 동일한 버그가있는 것으로 예상하여 "제공자"에 대해서도 동일하게 작성하기로 결정했습니다. 그러나 모든 스크린이 작동했습니다.나는 "범주"에 대해 다시 한 번 해냈습니다. 그런 다음 "유형"에 대한 실패한 작성 및 편집 화면을 삭제하고 "제공자"화면에서 다시 작성했습니다. 그리고 그들은 일했습니다.

나는 설명이 없습니다.

0

EF에서 "ProjectName.Models.AdvisoryProviders의 메타 데이터를 검색 할 수 없습니다. 이전에 보았지만이 오류는이 유형의 오류를 발견하고 확인하는 유일한 방법 인 MySQL을 사용했기 때문에 발생했습니다. 일 다. 오히려 EF에 대한 뷰를 생성의 버그 버전보다 볼 수있는 컨트롤러를 만들 http://blog.stevensanderson.com/2011/01/13/scaffold-your-aspnet-mvc-3-project-with-the-mvcscaffolding-package/를 사용하여 다음 데이터베이스에서 모델을 만들 수 http://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d를 사용하는 것이 었습니다

나는 EF5로 잠시 다시이 문제에 대해 게시 MVCScaffolding은 MVC가 내장 된 TT 템플릿보다 훨씬 좋은 통증을 처리하는 것 같습니다.

희망 lps

관련 문제