2009-09-06 5 views
0

아래의 편집 작업은 편집보기 형식으로 전환됩니다. 그러나 두 번째 방법에 게시하려면 내보기 페이지에서 제출을 누르면 companyToEdit 구조에 companyID가 포함되지 않고 예외가 발생합니다. 이것은 이상한 일입니다. 이전에이 작업을 수행했고 다른 인스턴스에서 id 필드를 얻었습니다. 내가보기에 아래의 코드 섹션 넣으면왜 내 ASP.NET MVC 응용 프로그램의 편집 코드가 작동하지 않습니까?

:

  <p> 
       <label for="CompanyID">CompanyID:</label> 
       <%= Html.TextBox("CompanyID", Model.CompanyID) %> 
       <%= Html.ValidationMessage("CompanyID", "*") %> 
      </p> 

를 그 다음은 잘 작동합니다. 그러나 회사 ID가 읽기 전용 필드이므로 작업을 중단합니다. 어떤 아이디어?

// 
    // GET: /Company/Edit/5 

    public ActionResult Edit(int id) 
    { 
     var companyToEdit = _repository.GetCompany(id); 
     return View(companyToEdit); 
    } 

    // 
    // POST: /Company/Edit/5 

    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Edit(int id, Company companyToEdit) 
    { 
     if (!ModelState.IsValid) 
      return View(); 
     try 
     { 
      _repository.Update(companyToEdit); 
      return RedirectToAction("Index"); 
     } 
     catch 
     { 
      return View(); 
     } 
    } 

편집 2 : 는 나는 이와 비슷한 일을하고 아래와 같은 해시 값의 ID를 숨길 수 있습니다 같아요. 나는 이것이 우리가 가장 안전하고 덜 복잡해질 궁극적 인 해결책이라고 생각한다.

<input id="fkey" name="fkey" type="hidden" value="4a3d337bf38b35e9ff4167cfa878160b"> 

답변

0

당신은 그래서 그냥 같이 넣어 편집 양식 의 id 필드가 있어야합니다 편집 (수) 방식의 세션에 ID를 저장하고 회사에 다시 넣을 수 있습니다

<%=Html.Hidden("CompanyID",Model.CompanyID) %> 
+0

OP는 어떤 형태로든 페이지에 ID를 쓰지 않기를 원합니다. –

-1

텍스트 상자의 이름을 CompanyID에서 companyToEdit.CompanyID로 변경해보십시오. 또한이 입력란이 양식 내에 (예 : Html.BeginForm을 사용하여) 포함되어 있는지 확인하십시오.

+0

코드는 잘 작동 회사 ID 또는 사용 요청 양식 ("회사 ID를")는 텍스트 상자 객체의 이름과 일치해야 문제가 시작 , 나는 사용자가 ID를 만지고 싶지 않기 때문에. 빠른 응답에 감사드립니다. – Geo

+0

ID가 필요하지만이를 사용자에게 공개하고 싶지 않은 경우 Html.Hidden을 통해 숨겨진 입력 변수를 추가 할 수 있습니다. –

+0

예.하지만 익숙한 사용자는 숨겨진 필드의 값을 변경하여 다른 행을 편집 할 수 있습니다. 권리? – Geo

0

이 당신이 코멘트에 제안 추측 ID에 대한 확실한 해결책이 Key 또는 이와 유사한라는 Model에 다른 필드를 추가하는 것입니다

+1

여러 회사에서 여러 탭을 편집하는 경우 어떻게됩니까? – mxmissile

+1

그는 "가능한"ID 컬렉션을 세션에 저장 한 다음 Post에서 유효성을 확인할 수 있다고 생각합니다. – mxmissile

+0

당신은 html.hidden에 숨겨진 필드로부터 값을 받고 세션의 ID를 – Omu

0

편집 (포스트) 방식에 반대하고 만들어 그것을 Guid, 예를 들어,

public class User 
{ 
    public int Id {get;set;} 
    public Guid Key {get;set;} 
} 

다음을보기 내부의 숨겨진 필드로 사용할 수 있습니다. 데이터베이스에서 인덱스 된 열을 만들면 이점을 얻을 수 있습니다 (클러스터되지 않은 기본 키로 만들고 Id 필드에 int을 기입하는 것이 이상적입니다).

그런 다음보기 :

<%=Html.Hidden("Key",Model.Key) %> 

자동으로 Controller 방법을 게시물의 매개 변수를 작성해야합니다. 그렇지 않으면 양식 태그 문제가있을 수 있습니다. 내가 그 빼앗아 때

0

변수 이름은 내가보기 페이지에 회사 ID가있을 때

관련 문제