使用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中的标记仍然非常干净.

相关文章

IE6是一个非常老旧的网页浏览器,虽然现在很少人再使用它,但...
PHP中的count()函数是用来计算数组或容器中元素的个数。这个...
使用 AJAX(Asynchronous JavaScript and XML)技术可以在不...
Ajax(Asynchronous JavaScript and XML)是一种用于改进网页...
本文将介绍如何通过AJAX下载Excel文件流。通过AJAX,我们可以...
Ajax是一种用于客户端和服务器之间的异步通信技术。通过Ajax...