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 error
callback
看看我的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格式。