ASP.Net MVC:从视图调用方法

在我的MVC应用程序中,控制器从外部API获取数据(模型)(因此没有使用模型类)并将其传递给视图。 数据(模型)有一个容器,其中有几个对象有几个字段(string值)。 一个视图迭代每个对象并调用另一个视图来绘制它们中的每一个。 这个视图遍历字段(string值)并绘制它们。

这是对我来说很棘手的地方。 有时我想在字段(string值)上做一些特殊的格式化。 我可以为格式编写20行代码,但是对于每一个领域我都要这样做,那只会是愚蠢的,哦,太难看了。 相反,我想采取字段(string值),传递给一个方法,并获得另一个string值。 然后为每个领域做到这一点。

所以,这是我的问题:

如何从视图调用方法?

我意识到我可能会在这里问错误的问题。 答案可能是我不这样做,我应该使用本地模型,并将从外部API获取的对象反序列化到本地模型,然后在本地模型中,在我通过之前执行“特殊格式化”它来看待。 但我希望有一些方法可以从视图中调用方法。 主要是因为它将我从API获得的自定义对象转换为我构build的本地自定义对象似乎有很多开销。 而且,我不确定这样做的最佳方式是什么。

免责声明:我知道类似的线程“ASP.NET MVC:从视图调用控制器方法”( ASP.NET MVC:从视图调用控制器方法 ),但我不明白这是如何回答我的问题。

这就是你如何在Controller上调用一个实例方法:

 @{ ((HomeController)this.ViewContext.Controller).Method1(); } 

这就是你在任何一个类中调用静态方法的方法

 @{ SomeClass.Method(); } 

假定该方法是公开的并且可见的话,这将工作。

build立在Amine的答案上,创build一个帮手,如:

 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 Helper的情况下

 @Html.MehtodName() 

控制器不应该从视图中调用。 这是MVC的全部概念 – 明确分离关注点。

如果你需要从视图调用控制器 – 你做错了什么。 重构的时间。

为什么你不使用Ajax

它简单,不需要page refresh并具有success and errorcallback

看看我的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'); } }); } 

除了使用控制器调用之外,您应该创build自定义助手来更改string格式。