JavaScript:__doPostBack의 여러 매개 변수




asp.net (3)

무엇보다도, 내가 찾은 유일한 게시물 ( calling-multiple-dopostback-from-javascript )은 내 문제에 도움이되지 않았기 때문에이 게시물이 중복 된 것이라고 믿지는 않습니다.

__doPostBack 함수가 포함 된 내 ASPX 웹 페이지에서이 JavaScript 함수가 있습니다.

function OpenSubTable(bolID, controlID) {
  // code
  __doPostBack('UpdatePanelSearch', bolID);
  // more code
}

완벽하게 작동하고 다음과 같이 내 코드에 bolID 값을 가져올 수 있습니다.

protected void UpdatePanelSearch_Load(object sender, EventArgs e)
{
  var bolID = Request["__EVENTARGUMENT"];
  // code
}

문제는 포스트 백을 통해 두 개의 다른 값을 전달해야한다는 것입니다. 이것에 대한 간단한 해결책이 있습니까? 분명히 이런 식으로 작동하지 않습니다.

function OpenSubTable(bolID, controlID) {
  // code
  __doPostBack('UpdatePanelSearch', bolID, controlID); // not that simple, i'm afraid :(
  // more code
}

어떤 도움이 가장 환영받을 것입니다.

감사합니다, Gunnar


전에 문자열을 만들고 분할하여 여러 매개 변수를 사용했습니다.

string args = String.Format("{0};{1}", bolID, ControlID);

이것을 포스트 백에 대한 인수에 전달할 수 있으며 포스트 백 인수를 확인할 때 speration 문자 (이 경우 ';')를 기준으로 문자열을 분할하면됩니다.


두 값을 하나의 JSON 문자열로 전달할 수 있습니다.

function OpenSubTable(bolID, controlID) {
  __doPostBack('UpdatePanelSearch', JSON.stringify({ bolID: bolID, controlID: controlID}));
}

그런 다음 서버에서 구문 분석합니다.

protected void UpdatePanelSearch_Load(object sender, EventArgs e)
{
  SomeDTO deserializedArgs = 
      JsonConvert.DeserializeObject<SomeDTO>(Request["__EVENTARGUMENT"]);
  var bolID = deserializedArgs.bolID;
  var controlID = deserializedArgs.controlID;
}

public class SomeDTO
{
    public string bolID { get; set; }
    public string controlID { get; set; }
}

.Net> = 4.0을 사용하고 있다면, Generic Touple로 deserialize 할 수 있고 SomeDTO를 생성하지 않아도된다고 생각합니다. 편집 : 동적 유형에 비 직렬화에 대한 추가 정보 .


서버 쪽 숨겨진 필드에 데이터를 배치 한 다음 다시 게시 한 후에 해당 데이터를 읽는 것이 좋습니다.

<asp:HiddenField id="Data1HiddenField" runat="server" />
<asp:HiddenField id="Data2HiddenField" runat="server" />

클라이언트 스크립트에는 서버 측 명명 컨테이너 수정 사항을 처리하기위한 ClientID 값이 포함되어야합니다. <%= expression %> 구문 (식 작성기)을 사용하려면 스크립트 (또는 스크립트의이 부분 이상)가 .aspx 파일 내에서 유지 관리되어야합니다. JavaScript를 외부 파일에 유지 관리하는 경우 기본 JavaScript가 호출하는 간단한 함수를 "등록"하여 데이터를 이동하고 필요한 ClientIDs 와 함께 해당 기능 서버 측을 구성 할 수 있습니다. ClientScriptManager.RegisterClientScriptBlock() 참조하십시오.

var data1 = "data value 1";
var data2 = "data value 2";
$("#<%= Data1HiddenField.ClientID %>").val(data1);
$("#<%= Data2HiddenField.ClientID %>").val(data2);

서버 측 코드는 다음과 같습니다.

string data1 = Data1HiddenField.Value;
string data2 = Data2HiddenField.Value;

확실히 여러 데이터 값을 전달하는 다른 기술이 있지만 간단하고 유지하기가 쉽다는 것을 알았습니다. 필요한 경우 모든 종류의 데이터를 전달하고 JSON을 사용하여 인코딩 할 수 있습니다.







postback