2017-09-21 3 views
0

저는 ASP.NET/MVC 응용 프로그램을 작성하고 있습니다. URL을 통해 전달되는 가치있는 넉넉한 관측 가능 이벤트를 채울 필요가 있습니다.조회 매개 변수에서 observable을 채우는 방법은 무엇입니까?

http://example.com/Controller/Action?param=test 

내가 입력에 URL 매개 변수를 통해 전달 된 값 넣을 : 나는 다음 페이지 열 것인지, 예를 들어, 가정 해 봅시다

<input data-bind="value: field, <?>"></input> <!-- Either set value to "test" here --> 

this.field = ko.observable(<?>) <!-- or here --> 

솔루션 1

HTML 생성에 대한 완전한 제어권을 가지고 있기 때문에 숨겨진 필드를 만들고 값으로 채운 다음 jQuery를 관측 가능하게하는 방식으로 변환 할 수 있습니다. 그러나 그것은 저에게 과도한 잔인한 것으로 보입니다.

<input type="hidden" id="temp" value="@Model.Param"></input> 

field($("#temp").val()); 

해결 방법 2

또 다른 옵션은 면도기와 약간의 자바 스크립트를 생성하는 것입니다 : 이것은 비록 위험

<script type="text/javascript" src="pageViewModel.js"></script> 
<script type="text/javascript"> 
    pageViewModel.setValue(@Model.Param); // Dangerous 
</script> 

- 내가 여기에 자바 스크립트를 주입 명을 피하기 위해 일부 보안 조치를 적용됩니다.

더 좋은 방법이 있습니까?

답변

2

당신은 window.location.search How to obtaining the querystring from the current URL with JavaScript?

var searchParams = new URLSearchParams(window.location.search); 
this.field = ko.observable(searchParams.get("param")); 

합니다 (또한 대답 SO 연결을 선택하여 녹아웃 뷰 - 모델에서 자바 스크립트를 직접 쿼리 문자열하지만 액세스 할 수있는 것은 URLSearchParams 경우 오래된 브라우저 지원을위한 솔루션을 제공합니다)

1

지원되지 않습니다

우리는 유틸리티 함수

0123을 가지고 ... 나는 더 나은 제이슨 말한의 답변을 좋아하지만 내가 일하는 곳 우리가 그것을 할 방법입니다
// this is a utility function that returns query string values. Pass in the 
// name of the query string and the value is returned 
function getUrlVars() { 
    var vars = {}; 
    var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (m, key, value) { 
     vars[key] = value; 
    }); 
    return vars; 
} 

는 우리는이

this.HazInd = ko.observable(getUrlVars()["HazInd"]); 
과 같이 호출