2013-03-26 1 views
2

메 커닉에 대한 체크리스트를 작성하기 때문에 모든 것이 라디오 버튼을 사용하고 메뉴를 끌어 올립니다 (blah!). 50 개가 넘는 항목이있을 수 있으므로 URL에 전달되는 값은 지저분해질 수 있습니다. POST를 사용하여 양식을 보내면 모든 변수 값이 전달되지만 Response.Redirect를 사용하여 양식을 데이터베이스에 작성해야하고 변수가 다음 페이지로 전달되는 것을 차단합니다. META 새로 고침과 Response.StatusCode = 307 시도했습니다; 그러나 지금까지 아무것도 작동하지 않습니다. 다음 페이지 하나 ....Webmatrix의 Response.Redirect에 대한 대체물

@{ 

var UNITNO = ""; 
var DATE = DateTime.Now; 
var MECHANIC = ""; 
var HEADLIGHTS = ""; 
var TailStopSignalHazard = ""; 

    if(IsPost) 
    { 

UNITNO = Request.Form["UNITNO"]; 
MECHANIC = Request.Form["MECHANIC"]; 
HEADLIGHTS = Request.Form["HEADLIGHTS"]; 
TailStopSignalHazard = Request.Form["TailStopSignalHazard"]; 

    var db = Database.Open("MAINT"); 
    var insertCommand = "INSERT INTO CHECKLIST (UNITNO, DATE, MECHANIC, HEADLIGHTS, TailStopSignalHazard) Values(@0, @1, @2, @3 ,@4)"; 
    db.Execute(insertCommand, UNITNO, DATE, MECHANIC, HEADLIGHTS, TailStopSignalHazard); 
    Response.StatusCode = 307; 
    Response.Redirect("list.cshtml"); 
    //<META http-equiv="REFRESH" content="0; url=list.cshtml">  
} 

<script type="text/javascript"> 
function validateForm() { 
    var aa = document.getElementById("UNITNO"); 
    var ac = document.getElementById("MECHANIC"); 
    var xx = document.getElementsByName("HEADLIGHTS"); 
    var xz = document.getElementsByName("TailStopSignalHazard"); 

    if (aa.options[aa.selectedIndex].index == 0) { alert("Must enter Unit Number"); return false; } 
    if (ac.options[ac.selectedIndex].index == 0) { alert("Must enter Mechanic"); return false; } 
    if (xx[0].checked == false && xx[1].checked == false) { alert("Must enter Headlights"); return false; } 
    if (xz[0].checked == false && xz[1].checked == false) { alert("Must enter Tail/Stop/Signal/Hazard"); return false; } 
} 
</script> 
} 


<!DOCTYPE html> 
<html> 

<head> 
<meta charset="utf-8" /> 
    <title>Western Check List</title> 
</head> 

<body> 

    <h1>Western Disposal</h1> 
    <!-- <form method="post" onsubmit="return validateForm()" action="list.cshtml"> //--> 
    <form method="post" onsubmit="return validateForm()"> 
    <fieldset> 
    <legend>Check List</legend> 
     &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp 

     <script> 
     date=Date() 
     document.write(date) 
     </script> 

<p> 
     <label> Unit Number: </label> 
     <select name="UNITNO"> 
     <option value=""></option> 
     <option value="108">108</option> 
     <option value="110">110</option> 
     <option value="111">111</option> 
     </select> 
</p> 


<p> 
     <label>Mechanic:</label> 
     <select name="MECHANIC" > 
     <option value=""></option> 
     <option value="BOB">BOB</option> 
     <option value="DANIEL">DANIEL</option> 
     <option value="DOUG">DOUG</option> 
     </select> 
</p> 

<p> 
    <b> LIGHTING: </b> 
</br> 
    <label>&nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &rlm; &nbsp Head Lights:</label> 
    <input type="RADIO" name="HEADLIGHTS" value="GOOD"/>GOOD &nbsp &nbsp 
    <input type="RADIO" name="HEADLIGHTS" value="BAD"/>BAD 

    </br> 
    <label>&nbsp Tail/Stop/Signal/Hazard:</label> 
    <input type="RADIO" name="TailStopSignalHazard" value="GOOD"/>GOOD &nbsp &nbsp 
    <input type="RADIO" name="TailStopSignalHazard" value="BAD"/>BAD 

</p> 

    <p><input type="submit" value="POST"/></p> 
</fieldset> 
    </form> 

</body> 

</html> 

입니다 그리고 나는 데이터베이스와이에 두 페이지에 "UNITNO"값 ...

@{ 
var db=Database.Open("MAINT"); 
var grid=new WebGrid(db.Query("SELECT * FROM CHECKLIST ORDER BY ID")); 
} 
<!DOCTYPE html> 
    <html> 
    <head> 
    <title>Western Check List Data Base</title> 
    <style type="text/css"> 
     table {border-collapse: collapse;} 
     td, th {border: solid 1px; } 
    </style> 
    </head> 
    <body> 
    <h1>Western Check List Data Base</h1> 
    @grid.GetHtml() 
    <a href="Default.cshtml">RETURN</a> 
    &nbsp &nbsp &nbsp &nbsp the unit number was="@Request["UNITNO"]" 
    </body> 

     </html> 

내가 webmatrix에 새로운 오전 초보자를 확인 대본에서 그러니 내 무지를 용서해주십시오. 내 희망은 누군가가 내 문제에 대한 간단한 해결책을 가지고 있으며 또한 전역 변수를 시도했지만 제대로 포맷하지 않았거나 작동하지 않는다는 것입니다. 읽어 주셔서 감사합니다!

Response.Redirect("list.cshtml?UNITNO=" + Request.Form["UNITNO"]); 

을하지만 많은 양의 데이터를 전송해야하는 경우, 그 지저분한 얻을 수 :

+0

은 두 번째 페이지의 의도이며, 지금까지 확인 된 모든 unitID의 목록을 볼 수 있습니까? 이것이 WHERE 절이없는 "Select * from ..."으로 코딩 된 것처럼 보입니다. – Knox

+0

예, 맞습니다. 그러나 그것은 데이터베이스에 데이터를 썼는지 확인하기위한 임시 페이지 일 뿐이며 숨겨진 변수 "UNITNO"의 값을 넘겼습니다. 실제 웹 사이트는 체크리스트에 더 많은 항목을 포함 할 것이고 결과 페이지에는 BAD로 확인 된 각 항목에 대한 설명을 보려면 해당 정보를 관리자에게 전자 메일로 보내십시오. –

답변

0

당신은 리디렉션에 두 번째 스크립트에 일부 데이터를 전달할 수 있습니다. 새로 생성 된 레코드의 데이터베이스 ID를 보내는 것이 더 효과적 일 수 있습니다. 그런 다음 두 번째 스크립트에 다시 열 읽고 당신이 원하는대로 데이터를 표시 할 수 있습니다

Response.Redirect("list.cshtml?id=" + db.GetLastInsertId()); 

내 자신의 일반적인 규칙은 내가 리디렉션을 수행하고 아마 리팩토링에 대해 생각해야 데이터를 관리 할 필요가있어 경우이다 가능한 경우 코드가 필요하지는 않지만 위의 솔루션이 작동해야합니다.

0

시도는

Response.Redirect("list.cshtml/" + Request.Form["UNITNO"]); 

난 당신이 양식의 시작에 var에 UNITNO를 사용하는 경우

Response.Redirect("list.cshtml?UNITNO=" + Request.Form["UNITNO"]); 

를 사용하여 작업하지만 URL이 어떤 UNITNO list.cshtml = UNITO xxx를 전달합니다 않는 것으로 확인 귀하의 양식에 URL var을 얻는 방법에 따라 항상 통과하지는 않습니다.

단순한/UNITNO로 바꾸면 요청이 잘 처리됩니다.

그러나 주어진 답은 이미 작동하므로 문제가 있음을 알았고 원래의 대답을이 방법으로 수정했습니다.

희망 하시겠습니까?