문제

ASP.NET MVC 응용 프로그램에서 관리자가 신입 회원을 수락하거나 거부 할 수있는 논리를 만들고 있습니다. 멤버 목록과 두 개의 버튼이 다음과 같이 수락하고 거부합니다.

<% foreach (var mm in (ViewData["pendingmembers"] as List<MyMember>)) %>
<% { %>
   <tr><td>Username:<%=mm.UserName %></td><td>
   <tr><td>Firstname:<%=mm.FirstName %></td><td>
   ...etc...
   <tr>
      <td>
      <% using (Html.BeginForm("AcceptPendingUser", "Admin"))
      { %>
          <input type="submit" value="Accept" />
      <% } %>
      </td>
      <td>
      <% using (Html.BeginForm("RejectPendingUser", "Admin"))
      { %>
        <input type="submit" value="Reject" />
      <% } %>
      </td>
    </tr>
<% } %>

따라서 보류중인 회원 데이터 목록은 MyMember-Objects 목록에 있습니다. 각 MyMember 객체는 멤버로 인쇄되고 관리자가 보류중인 멤버를 수락하거나 거부 할 수 있도록 두 개의 버튼이 설정됩니다.

그런 다음 컨트롤러에서 다음과 같은 두 입력 필드/양식의 처리를 분리합니다.

public ActionResult AcceptPendingUser()
{
   // TODO: Add code to save user into DB and send welcome email.
   return RedirectToAction("Index");
}

public ActionResult RejectPendingUser()
{
   // TODO: Add code to remove user from PendingUsers list and send rejection email.
   return RedirectToAction("Index");
}

사용자가 누르는 버튼 옆에 객체를 직접 가져오고 싶습니다. 보기에서 컨트롤러로 MyMember 객체를 어떻게 보낼 수 있습니까? 아니면 버튼 프레스와 함께 숫자 색인을 어떻게 보내나요? 어쩌면 숨겨진 필드가 있을까요?

도움이 되었습니까?

해결책

가장 간단한 옵션은 아마도 숨겨진 입력 일 것입니다.

<input type="hidden" value="<%=mm.Key%>" name="key" id="key" />

(그에 따라 이름; 각 형태로)

그런 다음 두 컨트롤러는 "키"라는 인수를받습니다 (이름 바꾸기). 여러 입력에서 객체를 구문 분석하려면 ModelBinder. 물론, 2*n 양식이 아니라 쿼리 스트링 기반 URL을 고려하거나 jQuery (또는 다른 스크립트 도우미)와 같은 것을 고려하여 양식을 사용할 필요없이 데이터를 제출할 수 있습니다 (스크립트를 사용할 수있는 경우).

다른 팁

HTML 버튼을 사용하는 대신 ActionLink를 사용하여 승인 된 멤버의 ID를 포함하도록 구성하는 것을 고려하십시오. 또 다른 대안은 관리자가 각 멤버를 승인 할 수 있도록 각 멤버에 대해 선택할 수있는 체크 박스 (값이 승인 된 ID)를 갖는 것입니다.

나 자신과 다른 MVC 초보자에게 대답 :

마침내이 코드로 작업했습니다.

보다:

 <%=Html.ActionLink(
     "Jump", 
     "Jump", 
     new { name=(ViewData["Person"] as Person).Name, 
     person=ViewData["Person"]}, 
     null) %>

제어 장치:

public ActionResult Index()
{
     ViewData["Title"] = "Home Page";
     ViewData["Message"] = "Welcome to ASP.NET MVC!";
     Person p = new Person();
     p.Name = "Barrack";
     p.Age = 35;
     ViewData["Person"] = p;
     return View();
}

public ActionResult Jump(string name, Person person)
{
    return View();
}

Jump Method에서 앱을 디버깅하면 이름 매개 변수에 대한 "Barrack"-String이지만 NULL의 Person Parameter가 제공됩니다.

또한 친절한 댓글 작성자가 설명하려고 한 내용을 이해합니다. 문자열 및 int와 같은 간단한 데이터 유형을 컨트롤러로 보내는 것은 쉽지만 내 사람과 같은 복잡한 유형은 다른 것을 필요로합니다.

기본적으로 int를 통과하면 충분합니다. 여기서 가장 어려운 부분은 ActionLink를 설정하는 올바른 방법을 찾는 것이 었습니다.

건배, pom

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top