首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单击Asp.Net-Core读入js模型值

单击Asp.Net-Core读入js模型值
EN

Stack Overflow用户
提问于 2020-08-04 10:02:46
回答 3查看 1.5K关注 0票数 1

我的Asp.Net-Web应用程序中有Razor页面,只有单击Submit按钮时,我才会尝试读取js中的输入。

在我的Razor页面

代码语言:javascript
复制
<form method="post">
 <input asp-for="Value1" id="value1" />
 <input asp-for="Value2" id="value2" />
 <button type="submit" value="Search" id="clickme">Search</button>
</form>

在我的短文里我读到:

代码语言:javascript
复制
<script>
  var val1 = @Model.Value1;
  var val2 = @Model.Value2;
</script>

但问题是,使用这段代码,当应用程序启动时,将读取值,而我只需要在单击submit按钮之后才读取这些值。有什么办法我能做到吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-08-05 02:46:19

如果使用@Model.PropertyName,它总是在应用程序启动时呈现值,正确的方法是使用js获取值。

下面是一个示例,如下所示:

代码语言:javascript
复制
<form method="post">
    <input asp-for="Value1" id="value1" />
    <input asp-for="Value2" id="value2" />
    
    <button type="submit" value="Search" id="clickme" onclick="Search()">Search</button>
</form>
@section Scripts
{
    <script>
        function Search() {
        var val1 = $('#value1').val();
        var val2 = $('#value2').val();
        //do your stuff....
        }
    </script>
}

不确定您的场景是什么,如果您只想将两个输入值传递给后端,甚至不需要使用js.Just保存属性名,而输入名称是剃刀页面中的same.And,则它具有BindProperty属性来绑定数据:

Index.cshtml:

代码语言:javascript
复制
@page
@model IndexModel
<form method="post">
    <input asp-for="Value1" id="value1" />
    <input asp-for="Value2" id="value2" />

    <button type="submit" value="Search" id="clickme">Search</button>
</form>

Index.cshtml.cs:

代码语言:javascript
复制
public class IndexModel : PageModel
{
    [BindProperty]
    public string Value1 { get; set; }
    [BindProperty]
    public string Value2 { get; set; }       

    public async Task<IActionResult> OnGet()
    {                   
        return Page();
    }
    public void OnPost() 
    { 
        //do your stuff
    }
}

结果:

或者添加如下参数:

代码语言:javascript
复制
public void OnPost(string Value1,string Value2) 
{ 
    //do your stuff
}
票数 1
EN

Stack Overflow用户

发布于 2020-08-04 10:21:21

使用javascript代码而不是razor syntax。要获得@Model.Value1的值,请使用document.getElementById,如下所示。

代码语言:javascript
复制
var val1 = document.getElementById('Value1').value;
var val2 = document.getElementById('Value2').value;

  • ,您的clickme按钮没有onclick attribute,所以我猜您可能正在使用document.getElementById("clickme").onclick = function() {...};$('#clickme').click(function() {...});绑定javascript或jquery代码中的单击事件。在该函数中,您应该使用var val1 = document.getElementById('Value1').value获取latest值.

Note当您使用razor syntax (如var val1 = @Model.Value1; )时,它将被解析并与相应的htmltext一起发送到浏览器。因此,如果您尝试从浏览器控制台检查html &视图呈现的源代码,您的script块如下所示。(假设您的@Model.Value1 = 10 & @Model.Value2 = "abc")。

代码语言:javascript
复制
<script>
  var val1 = 10;
  var val2 = abc; //<-- here it will not have "", so it will treated abc as an object.
  // Also it will throw an error here because there might not be any object abc.
  // If you want it to be print as string then you should be wrap @Model.Value2 with "" or '' like below.
  // var val2 = "@Model.Value2"; which will convert to var val2 = "abc";
</script>
票数 0
EN

Stack Overflow用户

发布于 2020-08-04 10:27:23

根据我所理解的,您需要,只有在提交后才能读取值,单击。您需要向Submit按钮添加一个单击事件:

代码语言:javascript
复制
 <button type="submit" value="Search" id="clickme" onclick="initializeValues()">Search</button>

只有单击Submit按钮时才会执行函数initializeValues():

代码语言:javascript
复制
<script>
var val1 ; 
var val2 ;
function initializeValues()
{
 val1 = @Model.Value1;
 val2 = @Model.Value2;
}
</script>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63244526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档