微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用HTML和JavaScript返回PartialView

正在进行AJAX调用(使用jQuery)来检索PartialView.与HTML一起,我想发送一个View正在显示的对象的JSON表示.我一直在使用的糟糕方式是将属性作为隐藏输入嵌入到HTML中,这很快变得难以处理并且紧密地耦合太多东西.

我可以在< script>中发送JavaScript.在HTML之后标记,但我真的很肛门将这些东西分开.这看起来像这样:

<%@ Control Language="C#" AutoEventWireup="true" Inherits="System.Web.Mvc.ViewUserControl<Person>" %>
<div class="person">
  First Name: <%= Html.TextBox("FirstName", Model.FirstName) %>
  Last Name: <%= Html.TextBox("LastName", Model.LastName) %>
</div>
<script type="text/javascript">
  // JsonSerialized object goes here
</script>

我考虑的另一个选项是对返回JsonResult的动作进行第二次AJAX调用,但这也感觉设计不好.

解决方法:

我想我发现了一个非常好的方法,只需将JSON包装在HtmlHelper扩展中.这是班级:

using System.Web.Script.Serialization;

public static class JsonExtensions {
    public static string Json(this HtmlHelper html, string variableName) {
        return Json(html, variableName, html.ViewData.Model);
    }

    public static string Json(this HtmlHelper html, string variableName, object model) {
        TagBuilder tag = new TagBuilder("script");
        tag.Attributes.Add("type", "text/javascript");
        JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
        tag.InnerHtml = "var " + variableName + " = " + jsonSerializer.Serialize(model) + ";";
        return tag.ToString();
    }
}

你通过以下方式调用它:

<%= Html.Json("foo") %>
<%= Html.Json("bar", Model.something) %>

我能想到的一个问题是它不是一个完全完美的分离;你仍然在技术上将JavaScript放在HTML中.但是,它不会对服务器进行额外调用,并且IDE中的标记仍然非常干净.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐