Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用asp路由参数的hiddenfield值_C#_Jquery_Asp.net Core Mvc - Fatal编程技术网

C# 使用asp路由参数的hiddenfield值

C# 使用asp路由参数的hiddenfield值,c#,jquery,asp.net-core-mvc,C#,Jquery,Asp.net Core Mvc,我在一个_PartialView中得到了一个隐藏字段,其中包含我想要的值(jQuery将其填充) 我在(foreach)asp路由参数中需要相同的值 <div class="js-products-list"> <input id="cropIdForProdBaseJQ" type="hidden" value="" /> @foreach (var product in Model.Products) { <a asp-controller="

我在一个_PartialView中得到了一个隐藏字段,其中包含我想要的值(jQuery将其填充) 我在(foreach)asp路由参数中需要相同的值

<div class="js-products-list">
 <input id="cropIdForProdBaseJQ" type="hidden" value="" />
  @foreach (var product in Model.Products)
  {
    <a asp-controller="XXX" asp-action="YYY" asp-route-language="@Model.CurrentLanguage" asp-route-cropId="" id="productCard">
  }
可以吗?
我将如何处理这个问题?
谢谢

生成html时使用razor属性。如果您是从javascript中引用此内容,则需要一个在编译页面后保持不变的属性。在您的情况下,这是很棘手的,因为您试图在请求完成后实现路由

相反,将输入值传递给操作的良好语义方式是使用表单,而不是尝试动态构建锚

<form method="get" asp-controller="XXX" asp-action="YYY" asp-route-language="@Model.CurrentLanguage">
    <input id="cropIdForProdBaseJQ" type="hidden" value="" />
    @foreach (var product in Model.Products)
    {
        @* Assuming you are doing something useful with "product" here *@
        <button name="PassThisId" value="@product.ProductId">Press me!</button>
    }
</form>

@foreach(模型产品中的var产品)
{
@*假设你正在做一些有用的“产品”在这里*@
按我!
}

razor视图中的标记助手在服务器上执行,其结果(HTML标记)将发送到浏览器,浏览器将呈现它。因此,此时anhcor标记帮助器已经生成了链接的href属性值

您可以做的是,使用JavaScript覆盖正常的链接单击行为,从页面读取输入元素值,并使用该值构建新URL并导航到该URL

您可以为cropId参数提供一个虚拟值

<a asp-controller="invoices" asp-action="GetData" asp-route-name="@Model.supplierName" asp-route-cropId=1 id="productCard">Click me</a>

通过在a标签中添加数据producttypeId解决了这个问题;将productCard从“id”更改为“类”

@foreach (var product in Model.Products)

{
<a asp-controller="XXX" asp-action="YYY" asp-route-language="@Model.CurrentLanguage" asp-route-cropId="" class="productCard" 
data-producttypeId="@product.ProductTypeId">
}
替换字符串会创建一个新字符串,而不是实际替换它。 将新创建的字符串放入href后,一切都很好! 谢谢大家的意见,给了我一些好的线索

如果I Console.log
$('#productCard').attr(“asp路由cropId”)
$('#productCard').attr(“asp路由cropId”,neededValue)前后我确实在脚本中获得了正确且更新的值。。但asp路线本身并不乏味
 $("#productCard").click(function (e) {
            // Stop the normal navigation
            e.preventDefault();

            //Build the new URL
            var url = $(this).attr("href");
            var date = $("#cropIdForProdBaseJQ").val();
            url = url.replace(1, date);

            //Navigate to the new URL
            window.location.href = url;

        });
@foreach (var product in Model.Products)

{
<a asp-controller="XXX" asp-action="YYY" asp-route-language="@Model.CurrentLanguage" asp-route-cropId="" class="productCard" 
data-producttypeId="@product.ProductTypeId">
}
$('.productCard').click(function(e) {    
var cropId = $('#croptype-filter-From-ProductType').val();

var clickedCard = $(this);
var baseUrl = clickedCard.attr("href");

var newUrl = baseUrl.replace("crop-ID", cropId);
window.location.href = newUrl;
});