문제

내 질문은 Engram과 비슷합니다 여기, 그러나 내 질문은 조금 더 나아갑니다. 내가 작동하려는 의도는 사용자가 얼마나 많은 항목을 만들 것인지 묻는 텍스트 상자가 있다는 것입니다. 숫자를 입력 한 후에는 항목을 허용하기 위해 더 많은 텍스트 상자를 만들어야합니다 (텍스트 상자와 동일한 프로세스를 반복하지만 먼저 아기 단계 ...) 게시물에서 키를 수집하려고 시도했지만 돌아옵니다. 항목 수를 요구하는 초기 텍스트 상자. 나는 여전히 MVC를 이해하려고 노력하고 있으며 지금까지 튜토리얼/비디오는 아직 이것에 대해 깊이 파고 들지 않습니다. 다시, 나는 이것이 아마도 jQuery를 사용하여 처리 할 수있는 것임을 알고 있지만, 여전히 같은 상황에 갇혀있을 것입니다.

이것은 내가 사용하는 컨트롤러입니다.

[AcceptVerbsAttribute("POST")]
    public ActionResult Create(int tbxNumberOfExercises)
    {
        ViewData["number"] = tbxNumberOfExercises;
        foreach (var key in Request.Form.Keys)
        {
            string keyString = key.ToString();
            if (keyString.StartsWith("tbox_exercise", StringComparison.OrdinalIgnoreCase))
            {
                string recNum = keyString.Substring(13, keyString.Length - 13);
                string approvedKey = Request.Form["tbox_exercise" + recNum];
                int number;
                int.TryParse(approvedKey, out number);
            }
        }
        return View("Create");
    }

그리고 이것은 내 ASPX입니다 :

<form action="/CreateWorkout/Create" method="post">
Number of Exercises:
<%= Html.TextBox("tbxNumberOfExercises") %>
<br />
<br />
<input type="submit" value="Set Exercise Number" />
</form>
<% if (ViewData["number"] != null)%>
There are this many:<%=Html.Encode(ViewData["number"])%>
<br />
and this line should show up
<% if (ViewData["number"] != null)
   {
       int max = (int)ViewData["number"];

       for (int i = 0; i < max; i++)
       {%>
          <br />
          <br />
          <%= Html.TextBox("tbox_exercise" + i) %>
    <% }
   } %>
<% if (ViewData["s"] != null) %>
<%=Html.Encode(ViewData["s"]) %>

내가 간과하고 이해하지 못하는 것이 있습니까, 아니면 결코 그것을 얻지 못할 것 같아서 그 일을 그만 두어야합니까?

도움을 주셔서 미리 감사드립니다. 저는 최대한 할 수있는 것처럼 배우려고 노력하고 있습니다.

도움이 되었습니까?

해결책

나는 이것을 무대에서 분류 할 것입니다. 당신은 원하는 것에 따라 "저장"보기를 추가해야합니다.

스콧

<form action="/Demo01/Create" method="post">
Number of Exercises:
<%= Html.TextBox("tbxNumberOfExercises") %>
<br />
<br />
<input type="submit" value="Set Exercise Number" />
</form>
<% if (ViewData["number"] != null) {%>
<form action="/Demo01/Save" method="post">
There are this many:<%=Html.Encode(ViewData["number"])%>
<br />
and this line should show up
<% if (ViewData["number"] != null) {
       int max = (int)ViewData["number"];

       for (int i = 0; i < max; i++) {%>
<br />
<br />
<%= Html.TextBox("tbox_exercise" + i) %>
<% }
   } %>
<% if (ViewData["s"] != null) %>
<%=Html.Encode(ViewData["s"]) %>
<input type="submit" value="Save Exercises" />
<% } %>
</form>

그런 다음 컨트롤러에서 다음과 같은 것입니다.

public class Demo01Controller : Controller {
    public ActionResult Create() {
        return View();
    }

    [AcceptVerbsAttribute("POST")]
    public ActionResult Create(int tbxNumberOfExercises) {
        ViewData["number"] = tbxNumberOfExercises;
        return View("Create");
    }

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Save() {
        foreach (var key in Request.Form.Keys) {
            string keyString = key.ToString();
            if (keyString.StartsWith("tbox_exercise", StringComparison.OrdinalIgnoreCase)) {
                string recNum = keyString.Substring(13, keyString.Length - 13);
                string approvedKey = Request.Form["tbox_exercise" + recNum];
                int number;
                int.TryParse(approvedKey, out number);
            }
        }
        return View(); // return/redirect to wherever you want
    }
}

다른 팁

응용 프로그램 사용의 요구 사항으로 JavaScript와 함께 살 수 있다고 가정 할 때 서버에 다시 게시하지 않고 JavaScript를 통해 텍스트 상자 클라이언트 측면을 추가하는 것을 고려합니다. 그렇지 않다면 @Scott의 접근 방식이 작동해야합니다. 선호의 문제로서 저장 메소드가 요청 객체를 직접 처리하기보다는 FormCollection 매개 변수를 가져갈 수 있습니다.

JavaScript 솔루션은 하나의 텍스트 상자와 버튼을 추가하여 다른 텍스트 상자를 추가하는 것입니다. 사용자는 충분할 때까지 텍스트 상자를 계속 추가 할 수 있습니다.

문제는 당신의 것입니다 </form> 엔딩 태그는 당신의 시야가 끝날 때 와야합니다.

이 수정 된 견해를 시도하십시오.

<form action="/CreateWorkout/Create" method="post">
Number of Exercises:
<%= Html.TextBox("tbxNumberOfExercises") %>
<br />
<br />
<input type="submit" value="Set Exercise Number" />
<% if (ViewData["number"] != null)%>
There are this many:<%=Html.Encode(ViewData["number"])%>
<br />
and this line should show up
<% if (ViewData["number"] != null)
   {
       int max = (int)ViewData["number"];

       for (int i = 0; i < max; i++)
       {%>
          <br />
          <br />
          <%= Html.TextBox("tbox_exercise" + i) %>
    <% }
   } %>
<% if (ViewData["s"] != null) %>
<%=Html.Encode(ViewData["s"]) %>
</form>

모범 사례까지 Scott의 접근 방식을 추천합니다. 이 답변은 정확한 시나리오를 작동시키는 것입니다.

도움을 주셔서 감사합니다. 오늘 아침 5시에 내 문제는 양식에 새 텍스트 상자가 포함되어 있지 않다는 것을 깨달았습니다. 나는 클라이언트 쪽을 유지하는 것이 더 좋기 때문에 JavaScript를 진지하게 살펴보고 DOM을 실제로 수정해야합니다.

정말 고마워.

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