我有一个BeginForm来填充模型的所有属性。然后我使用属性值来传递action方法(模型绑定)。
现在我在BeginForm之外有一个下拉列表,我想再向模型添加一个属性。从下拉列表中的选定值中选取属性值。
所以
AddQuestionModel
,又添加了一个属性SelectedLanguage
。在BeginForm中添加了一个隐藏的文本框。
@using (Html.BeginForm("AddSurveyQuestion", "Country", FormMethod.Post, new { enctype = "multipart/form-data", id = "AddQuestionForm" }))
{
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3>Add New Question</h3>
</div>
<div class="modal-body">
@Html.TextBox("SelectedLanguage",new { value = "English", @class = "hidden" })
收听变更事件。
$("#Model_SelectedLanguage").change(function () {
var selectedValue = $(this).find('option:selected').text();
$("#SelectedLanguage").val(selectedValue);
location.reload();
});
现在问题是我仍然无法在动作方法中获得选择值
[HttpPost]
public ActionResult AddSurveyQuestion(AddQuestionModel model)`.
我的意思是model.SelectedLanguage = null
。
此外,我发现TextBox呈现的输入元素根本没有隐藏。
答案 0 :(得分:1)
要构建隐藏字段,您可以使用
@Html.Hidden("SelectedLanguage", "english")
或
@Html.HiddenFor(x => x.SelectedLanguage)
模型出价搜索以下值:
证明SelectedLanguage
中AddQuestionModel
的值是一个字符串,它应该有效。
如果模型绑定器可以找到值并正确转换或映射,它将起作用。
如果页面模型视图与操作方法不同,则有3个选项:
构建自定义模型绑定,了解有关此内容的更多信息
https://docs.microsoft.com/en-us/aspnet/core/mvc/advanced/custom-model-binding