asp.net mvc获取访问者IP根据IP获取城市地址跳转到相应的页面 求大神!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了asp.net mvc获取访问者IP根据IP获取城市地址跳转到相应的页面 求大神!相关的知识,希望对你有一定的参考价值。
参考技术A 给你一个获取IP的代码,然后根据获取的地区名去数据库匹配对应的城市或二级域名即可。#region 获取IP
/// <summary>
/// 客户端ip(访问用户)
/// </summary>
public static string GetUserIp
get
string realRemoteIP = "";
if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)
realRemoteIP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].Split(',')[0];
if (string.IsNullOrEmpty(realRemoteIP))
realRemoteIP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
if (string.IsNullOrEmpty(realRemoteIP))
realRemoteIP = System.Web.HttpContext.Current.Request.UserHostAddress;
return realRemoteIP;
本回答被提问者采纳
ASP.NET MVC 获取文本框输入值
【中文标题】ASP.NET MVC 获取文本框输入值【英文标题】:ASP.NET MVC get textbox input value 【发布时间】:2013-09-23 06:20:08 【问题描述】:我有一个文本框输入和一些单选按钮。例如,我的文本框输入 HTML 如下所示:
<input type="text" name="IP" id="IP" />
一旦用户单击网页上的按钮,我想将数据传递给我的控制器:
<input type="button" name="Add" value="@Resource.ButtonTitleAdd" onclick="location.href='@Url.Action("Add", "Configure", new ipValue =@[ValueOfTextBox], TypeId = 1 )'"/>
也许这很简单,但我的问题是我不知道如何获取文本框值并将其传递给控制器。如何读取文本框值并通过ipValue=@[ValueOfTextBox]
将其传递给控制器?
【问题讨论】:
【参考方案1】:你可以做到这么简单:
首先:例如在 Models 中,你有 User.cs 和这个实现
public class User
public string username get; set;
public string age get; set;
我们将空模型传递给用户——当他像这样提交表单时,该模型将填充用户的数据
public ActionResult Add()
var model = new User();
return View(model);
当您通过空用户返回视图作为模型时,它会映射到您实现的表单的结构。我们在 HTML 方面有这个:
@model MyApp.Models.Student
@using (Html.BeginForm())
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>Student</h4>
<hr />
@Html.ValidationSummary(true, "", new @class = "text-danger" )
<div class="form-group">
@Html.LabelFor(model => model.username, htmlAttributes: new
@class = "control-label col-md-2" )
<div class="col-md-10">
@Html.EditorFor(model => model.username, new
htmlAttributes = new @class = "form-
control" )
@Html.ValidationMessageFor(model => model.userame, "",
new @class = "text-danger" )
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.age, htmlAttributes: new @class
= "control-label col-md-2" )
<div class="col-md-10">
@Html.EditorFor(model => model.age, new htmlAttributes =
new @class = "form-control" )
@Html.ValidationMessageFor(model => model.age, "", new
@class = "text-danger" )
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default"
/>
</div>
</div>
</div>
所以在按钮提交时你会像这样使用它
[HttpPost]
public ActionResult Add(User user)
// now user.username has the value that user entered on form
【讨论】:
【参考方案2】:你可以使用 jQuery:
<input type="text" name="IP" id="IP" value=""/>
@Html.ActionLink(@Resource.ButtonTitleAdd, "Add", "Configure", new ipValue ="xxx", TypeId = "1" , new @class = "link")
<script>
$(function ()
$('.link').click(function ()
var ipvalue = $("#IP").val();
this.href = this.href.replace("xxx", ipvalue);
);
);
</script>
【讨论】:
【参考方案3】:使用ajax方法的另一种方式:
查看:
@Html.TextBox("txtValue", null, new placeholder = "Input value" )
<input type="button" value="Start" id="btnStart" />
<script>
$(function ()
$('#btnStart').unbind('click');
$('#btnStart').on('click', function ()
$.ajax(
url: "/yourControllerName/yourMethod",
type: 'POST',
contentType: "application/json; charset=utf-8",
dataType: 'json',
data: JSON.stringify(
txtValue: $("#txtValue").val()
),
async: false
);
);
);
</script>
控制器:
[HttpPost]
public EmptyResult YourMethod(string txtValue)
// do what you want with txtValue
...
【讨论】:
每次我在操作方法中得到 txtValue 为空【参考方案4】:试试这个。
查看:
@using (Html.BeginForm("Login", "Accounts", FormMethod.Post))
<input type="text" name="IP" id="IP" />
<input type="text" name="Name" id="Name" />
<input type="submit" value="Login" />
控制器:
[HttpPost]
public ActionResult Login(string IP, string Name)
string s1=IP;//
string s2=Name;//
如果可以使用模型类
[HttpPost]
public ActionResult Login(ModelClassName obj)
string s1=obj.IP;//
string s2=obj.Name;//
【讨论】:
【参考方案5】:带有电子邮件文本框的简单 ASP.NET MVC 订阅表单可以这样实现:
型号
表单中的数据映射到这个模型
public class SubscribeModel
[Required]
public string Email get; set;
查看
视图名称应与控制器方法名称匹配。
@model App.Models.SubscribeModel
@using (Html.BeginForm("Subscribe", "Home", FormMethod.Post))
@Html.TextBoxFor(model => model.Email)
@Html.ValidationMessageFor(model => model.Email)
<button type="submit">Subscribe</button>
控制器
控制器负责处理请求并返回正确的响应视图。
public class HomeController : Controller
public ActionResult Index()
return View();
[HttpPost]
public ActionResult Subscribe(SubscribeModel model)
if (ModelState.IsValid)
//TODO: SubscribeUser(model.Email);
return View("Index", model);
这是我的项目结构。请注意,“Home”视图文件夹与 HomeController 名称匹配。
【讨论】:
如果我需要传递除文本框值之外的多个参数,例如,在控制器中标识某物类型的数字,这可以用你的方法吗?如果是这样,你能告诉我怎么做吗? @AndreiMikhalevich 你能举个例子吗? @user3132179 唯一的区别是你需要将 [HttpPost] 属性放在一个动作上,并且显然在表单中使用 Post 方法。 C# 视图 有(m => m.FirstName)
,视图和控制器 有@Html.TextBox("name")
。 Html.TextBox“名称”是否需要与 UserModel 变量匹配?如果不是,这些页面值如何映射到正确的对象属性?以上是关于asp.net mvc获取访问者IP根据IP获取城市地址跳转到相应的页面 求大神!的主要内容,如果未能解决你的问题,请参考以下文章
当服务器位于 AWS ELB 之后时,ASP.NET Core MVC 应用程序如何获取客户端 IP 地址?