如何在tempdata mvc4中存储值?

时间:2013-09-06 20:18:22

标签: jquery asp.net-mvc linq asp.net-mvc-4 razor

我试图在tempdata中存储json位置值,我通过使用json api获取用户当前位置,我想在位置的基础上向用户显示内容但是我无法这样做我正在分享我的代码,伙计们请帮帮我

<script type="text/javascript">

        var strip, strcountry, strcity, strregion, strlatitude, strlongitude, strtimezone

        function GetUserInfo(data) {

            strip = data.host; strcountry = data.countryName; strcity = data.city;

            strregion = data.region; strlatitude = data.latitude; strlongitude = data.longitude;

            strtimezone = data.timezone;

        }

        $(function () {

            BindUserInfo();

        })

        function BindUserInfo() {

            //document.getElementById('lblCity').innerText = strcity;
            $('#term').attr("placeholder", strcity);
            $('#term').attr("value", strcity);



        }

    </script>
    <script type="text/javascript" src="http://smart-ip.net/geoip-json?callback=GetUserInfo"></script>

现在我想从这里获取位置并在linq查询中应用,我正在使用MVC 4(Razor)请帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

根据上述评论,听起来好像发生了一系列事件:

  1. 用户位于包含此JavaScript代码的页面上
  2. 用户点击该页面上的链接转到另一个页面
  3. 其他页面需要根据此JavaScript代码中的值显示数据
  4. 如果这是正确的,那么您可以使用多种选项。要明确的是,有什么价值? strcity

    $('#term').attr("placeholder", strcity);
    $('#term').attr("value", strcity);
    

    如果是这样,那么当您在此处设置该值时,您还可能将其设置为可能是指向下一页的链接的查询字符串。像这样:

    $('#someLink').src = '@Url.Action("Index", "Restaurants")?city=' + strcity;
    

    这将使用预先运行的服务器端代码混合链接的根目录,而客户端代码只是将一个值附加到它。然后控制器方法只接受city作为参数:

    public ActionResult Index(string city)
    {
        // get your list of restaurants and return the view
    }
    

    此处不需要TempData,您只需将值直接发送到控制器操作。

    如果由于某种原因您不想像这样修改src,您可能会通过链接调用的表单发送值。因此,对于餐厅控制器上的索引操作而不是ActionLink,您可能会遇到以下情况:

    @using(Html.BeginForm("Index", "Restaurants", FormMethod.Get))
    {
        <a id="restaurantsLink" href="javascript:void(0);">Go to restaurants</a>
        <input type="hidden" name="city" />
    }
    

    以后的JavaScript代码:

    $('#restaurantsLink').click(function () {
        $('form').submit();
    });
    

    您可能需要在jQuery选择器中更加唯一地标识该表单,特别是如果该页面上有(或可能是)其他表单。然后在原始JavaScript代码中,您只需在隐藏输入中设置值:

    $('input[name=city]').val(strcity);
    

    在第二种情况下,控制器操作仍然与第一种操作相同,接受city字符串参数。