ASP.Net MVC : 뷰에서 메서드 호출
내 MVC 앱에서 컨트롤러는 외부 API에서 데이터 (모델)를 가져 오지 않음 (사용중인 모델 클래스가 가져 오기) 뷰에 전달합니다. 데이터 (모델)에는 여러 필드 (문자열 값)가있는 여러 개체가있는 컨테이너가 있습니다. 하나의 뷰는 각 객체를 반복하고 다른 뷰를 호출하여 각각을 그립니다. 이 뷰는 필드 (문자열 값)를 반복하고 그립니다.
여기가 까다로워지는 곳입니다. 어디에 필드 (문자열 값)에 특별한 서식을 지정하고 싶습니다. 형식화를 위해 20 줄의 코드를 사용할 수 있습니다. 대신 필드 (문자열 값)을 가져 오는 전달 메소드에 전달하고 다른 값을 되찾고 싶습니다. 그리고 모든 분야에 대해 그렇게하십시오.
그래서 여기 내 질문이 있습니다.
뷰에서 메소드를 어떻게 호출합니까?
여기에서 잘못된 질문을하고 있는지 알고 있습니다. 대답은 아마도 내가 사용하지 않습니다. 그리고 로컬 모델을 사용하고 외부 API에서 생성 된 로컬 모델로 역화 한 다음 로컬 모델에서 통과하기 "특수 형식 지정"을 수행해야합니다. 보기에. 하지만 대신 뷰에서 메서드를 호출 할 수있는 방법이 있기 때문에 바랍니다. 대부분의 다른 사용자가 발생하는 대부분의 다른 사용자 지정 개체를 포함하는 API에서 빌드 한 로컬 사용자 지정 개체로 변환합니다. 또한 최선의 방법이 무엇인지 잘 모르겠습니다.
면책 조항 : "ASP.NET MVC :보기에서 컨트롤러 호출 호출"( ASP.NET MVC : 보기에서 컨트롤러 호출)이라는 호출 방식을 선택합니다.
컨트롤러에서 인스턴스 메서드를 호출하는 방법은 다음과 있습니다.
@{
((HomeController)this.ViewContext.Controller).Method1();
}
이것은 모든 클래스에서 정적 메서드를 호출하는 방법입니다.
@{
SomeClass.Method();
}
가정하면 작동합니다.
Amine의 답변을 바탕으로 다음과 같은 도우미를 만듭니다.
public static class HtmlHelperExtensions
{
public static MvcHtmlString CurrencyFormat(this HtmlHelper helper, string value)
{
var result = string.Format("{0:C2}", value);
return new MvcHtmlString(result);
}
}
당신의 관점에서 : 사용 @Html.CurrencyFormat(model.value)
표준 숫자 형식 와 같은 간단한 형식 을 지정하는 경우 위의 도우미 예제와 같이 뷰에서 인 String.format () 을 사용하면 됩니다 .
@string.Format("{0:C2}", model.value)
정적 서식 지정 방법 또는 HTML 도우미를 구현 한 다음 다음 구문을 사용할 수 있습니다.
@using class_of_method_namespace
...
// HTML page here
@className.MethodName()
또는 HTML 도우미의 경우
@Html.MehtodName()
컨트롤러는 뷰에서 호출되지 않습니다. 이것이 MVC의 전체 개념입니다.
보기에서 컨트롤러를 호출 해야하는 경우-뭔가 잘못하고있는 것입니다. 리팩토링 시간.
왜 사용하지 않는 Ajax
로
로하지 않는 필요 단순하고 page refresh
하고있다 success and error
콜백을
내 samlpe 좀 봐
<a id="ResendVerificationCode" >@Resource_en.ResendVerificationCode</a>
그리고 JQuery에서
$("#ResendVerificationCode").on("click", function() {
getUserbyPhoneIfNotRegisterd($("#phone").val());
});
그리고 내 컨트롤러와 컨트롤러를 호출하고 데이터베이스에서 반환하는 내 ajax입니다.
function getUserbyPhoneIfNotRegisterd(userphone) {
$.ajax({
type: "GET",
dataType: "Json",
url: '@Url.Action("GetUserByPhone", "User")' + '?phone=' + userphone,
async: false,
success: function(data) {
if (data == null || data.data == null) {
ErrorMessage("", "@Resource_en.YourPhoneDoesNotExistInOurDatabase");
} else {
user = data[Object.keys(data)[0]];
AddVereCode(user.ID);// anather Ajax call
SuccessMessage("Done", "@Resource_en.VerificationCodeSentSuccessfully", "Done");
}
},
error: function() {
ErrorMessage("", '@Resource_en.ErrorOccourd');
}
});
}
컨트롤러 호출을 사용하는 경우를 제외하고 호스트 형식을 변경하기위한 사용자 지정 도우미를 사용합니다.
나는 lashrah의 대답을 시도하고 구문을 조금 변경 한 후에 작동했습니다. 이것은 나를 위해 일한 것입니다.
@(
((HomeController)this.ViewContext.Controller).Method1();
)
뷰에서 호출을 호출하면.
뷰 모델에 속성을 추가하고 컨트롤러에서 설정 한 다음 뷰에서 사용합니다.
다음은 그 예입니다.
MyViewModel.cs :
public class MyViewModel
{ ...
public bool ShowAdmin { get; set; }
}
MyController.cs :
public ViewResult GetAdminMenu()
{
MyViewModelmodel = new MyViewModel();
model.ShowAdmin = userHasPermission("Admin");
return View(model);
}
MyView.cshtml :
@model Proj.ViewModels.MyViewModel
@if (@Model.ShowAdmin)
{
<!-- admin links here-->
}
참조 URL : https://stackoverflow.com/questions/15398177/asp-net-mvc-calling-a-method-from-a-view
'ProgramingTip' 카테고리의 다른 글
데이터베이스 연결을 닫는 가장 좋은 장소 (0) | 2021.01.10 |
---|---|
속성에 관련 화되지 않음 (0) | 2021.01.10 |
Angular JS는 ng-repeat의 첫 번째 요소를 숨 깁니다. (0) | 2021.01.10 |
부모와 부모의 형제를 선택하는 방법 (0) | 2021.01.10 |
HTML5 데이터 속성에 자바 펼쳐 배열 저장 및 검색 (0) | 2021.01.10 |