c# - 选择 Tag Helper 获取值和文本

标签 c# asp.net-core asp.net-core-mvc tag-helpers

我刚刚读过这篇文章Select Tag Helper ,如何使用标签助手,之前我问过 onchange 用于选择标签助手。

但这一次,我需要获取选择标签助手的文本。 这是我的模型:

public class Paid__Period {
    [Key]
    public Int16 ID_Period { get; set; }
    public string Period { get; set; }
}

这是我的观点:

<select asp-for="Period" class="form-control input-sm"                        
    asp-items="@(new SelectList (@ViewBag.Period, "ID_Period", "Period"))" onchange="this.form.submit()">
</select>

当它渲染成 HTML 时,它变成了

<select class="form-control input-sm" onchange="this.form.submit()" id="Period" name="Period">
   <option value="0">- Choose Period -</option>
   <option value="1">2016 - 1 (Jan - Jun)</option>
   <option value="2">2017 - 1 (Jan - Jun)</option>
   <option value="3">2017 - 2 (Jul - Dec)</option>
   <option value="4">2018 - 1 (Jan - Jun)</option>
   <option value="5">2018 - 2 (Jul - Dec)</option>
   <option value="6">2019 - 1 (Jan - Jun)</option>
   <option value="7">2019 - 2 (Jul - Dec)</option>
   <option value="8">2020 - 1 (Jan - Jun)</option>
</select>

到目前为止,一切正常。但每次选择 ID_Period 和 period: '2020 - 1 (Jan - Jun)' 时,我都需要从 View 到操作 Controller 的返回值。 如何做到这一点?

我只是像这样准备我的行动:

[HttpPost]
public IActionResult Paid_Tuition (Paid_Period period) {
}

但 Paid_Period 始终为空。 有什么建议可以解决我的上述问题吗?

最佳答案

您需要另一个绑定(bind)到 string 的标签助手(例如隐藏字段) View 模型的属性,用于将所选值中的文本选项与 <select> 一起传递元素本身:

<select asp-for="ID_Period" class="form-control input-sm"                        
    asp-items="@(new SelectList (@ViewBag.Period, "ID_Period", "Period"))" onchange="onSelectedIndexChanged(this)">
</select>
<input asp-for="Period" type="hidden" />

然后您可以使用绑定(bind)到 onchange 的 JS 函数检索选定的文本选项事件:

function onSelectedIndexChanged(value)
{
    var textValue = value.options[value.selectedIndex].text;
    document.getElementById('Period').value = textValue;

    // if you want to submit the form, uncomment this line below
    // document.getElementById('yourformId').submit();
}

或者,如果您使用 jQuery,则可以删除 onchange事件属性和句柄 change事件而不是将值分配给隐藏字段:

$('#ID_Period').change(function () {
    var textValue = $('#ID_Period option:selected').text();
    $('#Period').val(textValue);

    // if you want to submit the form, uncomment this line below
    // $('form').submit();
});

注意:

更建议使用按钮触发表单提交,而不是 <select>元素的change事件。

关于c# - 选择 Tag Helper 获取值和文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54565424/

相关文章:

c# - 缩短整数数组

c# - WinCE 中的屏幕校准

c# - 通过 REST 在列表中插入项目

c# - 如何为 DateTime 验证添加范围

c# - 使用 Identity Server 4 在包含 View 和资源的 MVC 核心应用程序中刷新访问 token 的最佳实践

.net - 名称 'HttpContext' 在 Razor 的当前上下文中不存在

C# XOR 运算符 : ^ vs ^= and implicit type conversion

c# - 在 ASP.NET Core 中流式传输后如何删除文件

c# - 在 ASP.NET Core 中设置 app.UseFileServer 后获取 PhysicalPath

javascript - Console.Log 没有在 React 构造函数中被调用