如何将变量从视图中的javascript函数传递到ASP.NET内核中控制器中的操作
我已在控制器类中设置创建操作-如何将变量从视图中的javascript函数传递到ASP.NET内核中控制器中的操作,javascript,html,asp.net,asp.net-mvc,model-view-controller,Javascript,Html,Asp.net,Asp.net Mvc,Model View Controller,我已在控制器类中设置创建操作- public async Task<IActionResult> Create([Bind("Id,Title,Post,YoutubeURL")] Announcement announcement) { if (ModelState.IsValid) { string currentUserId = _userManager.GetUserId(User); A
public async Task<IActionResult> Create([Bind("Id,Title,Post,YoutubeURL")] Announcement announcement)
{
if (ModelState.IsValid)
{
string currentUserId = _userManager.GetUserId(User);
ApplicationUser currentUser = _context.Users.FirstOrDefault
(x => x.Id == currentUserId);
announcement.User = currentUser;
//UserName is also set to allow for easier access of username from the index view
string currentUserName = _userManager.GetUserName(User);
announcement.UserName = currentUserName;
DateTime date = DateTime.Now;
announcement.Date = date;
announcement.Views = 0;
_context.Add(announcement);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(announcement);
}
公共异步任务创建([Bind(“Id,Title,Post,YoutubeURL”)]公告)
{
if(ModelState.IsValid)
{
字符串currentUserId=\u userManager.GetUserId(用户);
ApplicationUser currentUser=\u context.Users.FirstOrDefault
(x=>x.Id==currentUserId);
announcement.User=当前用户;
//用户名还设置为允许从索引视图更轻松地访问用户名
字符串currentUserName=\u userManager.GetUserName(用户);
announcement.UserName=当前用户名;
DateTime date=DateTime.Now;
公告日期=日期;
公告.视图=0;
_添加(公告);
wait_context.SaveChangesAsync();
返回重定向到操作(名称(索引));
}
返回视图(公告);
}
然后,我使用此表单从视图中的用户处获取所需的数据
<form asp-action="Create" id="createForm">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="Title" class="control-label"></label>
<input asp-for="Title" class="form-control" id="titleText" />
<span asp-validation-for="Title" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Post" class="control-label"></label>
<input asp-for="Post" class="form-control input-lg" id="postText" />
<span asp-validation-for="Post" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="YoutubeURL" class="control-label"></label>
<input asp-for="YoutubeURL" class="form-control input-lg" id="youtubeText" />
<span asp-validation-for="Post" class="text-danger"></span>
</div>
<div class="form-group">
<a asp-action="Index" class="btn btn-default">Cancel</a>
<button type="button" id="submitBtn" class="btn btn-primary">Create</button>
</div>
</form>
取消
创造
现在我想使用这个javascript函数获取用户的地理位置,并将其发送到“Create”-
window.onload=geoFindMe();
函数geoFindMe(){
var输出=document.getElementById(“coords”);
如果(!navigator.geolocation){
output.innerHTML=“您的浏览器不支持地理位置””;
返回;
}
功能成功(职位){
变量纬度=位置坐标纬度;
var经度=position.coords.longitude;
output.innerHTML='纬度为'+Latitude+'''”
经度为'+Latitude+'''”;
}
函数错误(){
output.innerHTML=“无法检索您的位置”;
}
output.innerHTML=“定位…”;
navigator.geolocation.getCurrentPosition(成功,错误);
}
一切正常,但我无法完成最后一步,如何将纬度和经度变量发送到控制器中的“创建”操作,以便我能够创建包含这些变量的模型?对于希望执行类似操作的任何人,我的解决方案如下所示- 我为经度和纬度创建了两个新的隐藏表单输入-
<input asp-for="longitude" type="hidden" class="form-control input-lg" id="longID" />
<input asp-for="latitude" type="hidden" class="form-control input-lg" id="latID" />
你研究过Ajax吗?你的
Create
操作甚至没有使用纬度和经度属性。我还没有添加long/lat属性,因为我第一次想知道如何从javascript函数中包含long/lat变量。我没有研究过Ajax,这个问题值得研究吗?您需要从这个问题开始,堆栈溢出不是一个代码编写服务。
<input asp-for="longitude" type="hidden" class="form-control input-lg" id="longID" />
<input asp-for="latitude" type="hidden" class="form-control input-lg" id="latID" />
window.onload = getGeoLocation();
function getGeoLocation() {
if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(useLocation);
}
};
function useLocation(position) {
document.getElementById('longID').value = position.coords.longitude;
document.getElementById('latID').value = position.coords.latitude;
};