【问题标题】:Trying to dynamically insert javascript values into asp tag helper element尝试将 javascript 值动态插入到 asp 标签助手元素中
【发布时间】:2021-09-23 13:22:31
【问题描述】:

@page
@model Vescoverer.Pages.Registration.LocationModel

@{
    ViewData["Title"] = "Location";
}

<div class="row">
    <div class="col-md-4">
        <form method="post">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>

            <div id="long" class="form-group">
                <label asp-for="User.Longitude" class="control-label"></label>
                <input id="long" asp-for="User.Longitude" class="form-control" />
                <span asp-validation-for="User.Longitude" class="text-danger"></span>
            </div>

            <div id="lat"class="form-group">
                <label asp-for="User.Latitude" class="control-label"></label>
                <input asp-for="User.Latitude" class="form-control" v />
                <span asp-validation-for="User.Latitude" class="text-danger"></span>
            </div>

<div class="form-group">
    <input asp-for="User.Longitude" type="submit" value="Next" class="btn btn-primary" />
            </div>
        </form>
        <button onclick="getLocation()">Get Location</button>
    </div>
</div>
<script>

    var lat = document.getElementById("lat");
    var long = document.getElementById("long");

    function getLocation() {
        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(showPosition);
        } else {
            lat.innerHTML = "Geolocation is not supported by this browser.";
        }
    }

    function showPosition(position) {
        lat.innerHTML = position.coords.latitude;
        long.innerHTML = position.coords.longitude;

        $.ajax(
            {
                type: "POST", //HTTP POST Method
                url: "Location", 
                data: { //Passing data
                    Longitude: //insert data value, //Reading text box values using Jquery
                    Latitude: //insert data value
                }
            });
    }
</script>

我希望经度和纬度结果进入适当的表单输入值,以便在用户单击“获取位置”时传递到后端,而不是结果用 innerHTML 字符串替换表单值。我知道 asp-for 标记 heper 处理服务器端方面,但我不确定如何让 javascript 结果显示在表单值中。因此,当用户按下下一步时,数据将传递到数据库中,正如您所看到的,我也在尝试使用 Ajax,但我不太确定。

【问题讨论】:

    标签: javascript asp.net-core razor-pages


    【解决方案1】:

    您可以使用“.val(value)”方法设置匹配元素集合中每个元素的值

    $("input[name*='Latitud']").val(position.coords.latitude);
    $("input[name*='Longitude']").val(position.coords.longitude);
    

    结果

    以下是完整的demo,大家可以参考一下。

    型号

    public class User
    {
        public string Longitude { get; set; }
        public string Latitude { get; set; }
    }
    

    xxx.cshtml.cs

    public class IndexModel : PageModel
    {
        private readonly ILogger<IndexModel> _logger;
    
        public IndexModel(ILogger<IndexModel> logger)
        {
            _logger = logger;
        }
        [BindProperty]
        public new User User { get; set; }
        public void OnGet()
        {
        }
        public void OnPost()
        {
        }
    }
    

    xxx.cshtml

    @page
    @model IndexModel
    @{
        ViewData["Title"] = "Home page";
    }
    
    <div class="row">
     <div class="col-md-4">
      <form method="post">
       <div asp-validation-summary="ModelOnly" class="text-danger"></div>
       <div id="long" class="form-group">
        <label asp-for="User.Longitude" class="control-label"></label>
        <input id="long" asp-for="User.Longitude" class="form-control" />
        <span asp-validation-for="User.Longitude" class="text-danger"></span>
       </div>
       <div id="lat" class="form-group">
        <label asp-for="User.Latitude" class="control-label"></label>
        <input asp-for="User.Latitude" class="form-control" v />
        <span asp-validation-for="User.Latitude" class="text-danger"></span>
       </div>
       <div class="form-group">
        <input type="submit" value="Next" class="btn btn-primary" />
       </div>
       <button type="button" onclick="getLocation()">Get Location</button>
      </form>
     </div>
    </div>
    @section scripts{
    <script>
        function getLocation() {
            if (navigator.geolocation) {
                navigator.geolocation.getCurrentPosition(showPosition);
            } else {
                lat.innerHTML = "Geolocation is not supported by this browser.";
            }
        }
        function showPosition(position) {
            $("input[name*='Latitud']").val(position.coords.latitude);
            $("input[name*='Longitude']").val(position.coords.longitude);
        }
    </script>
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-06
      • 2017-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-02
      • 1970-01-01
      相关资源
      最近更新 更多