ProgramingTip

ASP.Net MVC : 뷰에서 메서드 호출

bestdevel 2021. 1. 10. 22:56
반응형

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

반응형