Ajax写点东西来吐槽一下和好,真是无语了。

先是,写这首博文的目的是受未来自己看的,希望以后每天都念一下,这样尽管不会见犯错误了。

前方片天,在出项目之时段,写一个效应,就是采取 Ajax
异步加载一些信息,这个于凡开发进程被,我们一般还见面遇到,在 Controller
中描写一个异步 Action 方法,使用 HttpGet 或
HttpPost,然后于章程中处理局部操作,最后回来拼接的 Html 字符串,View
中之操作就是描摹一个 Ajax 脚本进行调用,贴一点示范代码:

Controller 中的 Action 方法:

public class CommonAjaxController : Controller
{
    [HttpGet]
    public async Task<ContentResult> GetAjaxInfo(int para)
    {
        var item = await .......GetInfo(para);
        StringBuilder resultHtml = new StringBuilder();
        foreach (var item in news)
        {
            resultHtml.Append("< li >< a href = \"/n/\{item.Url}/\" target = \"_blank\" >\{item.Title}< / a > < / li >");
        }
        return Content(resultHtml.ToString());
    }
}

View 中的 Ajax 脚本:

$(function () {
    $.ajax({
        url: '/CommonAjax/GetAjaxInfo',
        type: 'GET',
        datatype: "json",
        contentType: "application/json; charset=utf-8",
        data: { para: para },
        success: function (data) {
            if (data) {
                $("#div_id").html(data);
            }
        }
    });
});

咦问题吗?就是自己不管怎么调试,最后 div_id 中填入的 data
始终是字符串格式,也就是没有变的 html
格式,说实话,这个题材,我马上“挣扎”了非常悠久,我觉着是 Controller 中之
Action
只能回去格式化的字符串,然后便各种搜索关键字,花了老大丰富时,最后也从来不一个结果,因为是经
Ajax 脚本填充的,不是由此 ViewData 之类的事物传递,所以你无克一直以
View 中的 Html.Raw() 进行 Html 格式转换,所以换操作必须于 Action
方法被,但要是,没有立即之类的化解智,这个题目,大概花了自身几个钟头之时候,我隐约记得之前这样写的艺术是无问题之,为是我来翻动了下前项目面临相互仿佛之代码,确实没什么问题,为这个我更郁闷了。。。

好家伙,往事不堪回首,最后发现,原因发生当我“复制粘贴”的 Html
字符串上,不亮堂干什么,我是应用浏览器的翻元素功能,然后复制现有的
Html 代码,拷贝在 VS2015 中,当时不曾怎么放在心上,你可以仔细看下 GetAjaxInfo
中之 Html
字符,会意识中莫名多了一个“空格”,哎,哎,哎,当自家发现凡是以此题目之时节,我之首先设法是:窗户在哪???我要跳下来。

###本,一个题目场景证明不了友好发生多“”,就在今,又是接近之题材,哎!

自我使用 ASP.NET 5,在 Action 中于 ViewData 赋一个值,然后在 View
中进行亮,Html 中走访 ViewData 没有呀问题,但是当自身当 JS
脚本中走访,就应运而生了问题,示例代码:

Controller 中的 Action 方法:

public async Task<IActionResult> About()
{
    using (var context=new BloggingContext())
    {
        ViewData["data"] = await context.Blogs.FirstOrDefaultAsync();
    }
    //ViewData["data"] = await Task<string>.Run(() => { return "data"; });
    //ViewData["data"] = "data";
    ViewBag.Message = "Your application description page. XISHUAI";
    return View();
}

View 代码

@{
    ViewBag.Title = "About";
}
<h2>@ViewBag.Title.</h2>
<h3>@ViewBag.Message</h3>

<h1>@ViewData["data"]</h1>

<p>Use this area to provide additional information.</p>
<script type="text/javascript">
    alert(@ViewData["data"])
    window.onload = function () {
        alert(@ViewData["data"]);
    }
</script>

点是自后来底测试代码,可能有些乱,但写出来都是发出缘由的,这等同软我研究什么“”了邪?答案是:async
的 Action 只能为 ViewData 赋值,然后 JS
脚本才会看到。听起来或发接触晕,为什么我会这样认为吧?因为之前我勾勒类似的代码,ViewData[“data”]
是通过 await 获取访问到之数,而今日本身写的 Action
方法,ViewData[“data”]
是同步赋值的,但这种写法就可怜,所以自己管“嫌疑”放在了她身上,然后有失去探寻“async
Action
ViewData”之类的关键词,但却尚无搜到什么有“价值”的东西,现在心想,能搜到的话,就真奇怪了,为了再现这个“问题”,我还要打了只测试项目进行操作,最后发现一块赋值的
JS
也无能够访问了,当时做到这,真是要那个的发,然后花费了点儿独小时开展双重想想,没办法,一点头脑都不曾,然后肚子饿了,下班吃东西,在路上,以至于吃饭的下,我都于想这题材,在想到底是呀方有了问题?最后,还是某些头脑都尚未。

返回住的地方,倒了海茶,然后又“思考”,不晓抽了呀筋,把
alert(@ViewData[“data”]) 改成
alert(“@ViewData[“data”]”),你猜怎么在???居然访问到了,我之天哪???自己究竟是出差不多”二“啊,哎!


小结下团结写代码的法门,或者是找解决问题的方:

  • 得要密切。
  • 一再 CodeReview 自己写的代码,不要过于“相信”自己。
  • 倘若沉淀在一个问题,试着跳出这个题材,散散步,或者喝相同盏茶,也许就算见面发觉问题所在了。

谨记谨记。。。

相关文章