将BeginForm之外的值传递给它

时间:2017-08-19 13:58:17

标签: jquery asp.net-mvc razor

我有一个BeginForm来填充模型的所有属性。然后我使用属性值来传递action方法(模型绑定)。

现在我在BeginForm之外有一个下拉列表,我想再向模型添加一个属性。从下拉列表中的选定值中选取属性值。

所以

  1. 我修改了模型AddQuestionModel,又添加了一个属性SelectedLanguage
  2. 在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">&times;</button>
             <h3>Add New Question</h3>
         </div>
         <div class="modal-body">
         @Html.TextBox("SelectedLanguage",new { value = "English", @class = "hidden" })
    
  3. 收听变更事件。

    $("#Model_SelectedLanguage").change(function () {
            var selectedValue = $(this).find('option:selected').text();
            $("#SelectedLanguage").val(selectedValue);
            location.reload();
    });
    
  4. 现在问题是我仍然无法在动作方法中获得选择值

    [HttpPost]
    public ActionResult AddSurveyQuestion(AddQuestionModel model)`.
    

    我的意思是model.SelectedLanguage = null

    此外,我发现TextBox呈现的输入元素根本没有隐藏。

1 个答案:

答案 0 :(得分:1)

要构建隐藏字段,您可以使用

@Html.Hidden("SelectedLanguage", "english") 

@Html.HiddenFor(x => x.SelectedLanguage)

模型出价搜索以下值:

  • 表单数据
  • 路线数据
  • 查询字符串
  • 文件
  • 自定义(例如Cookie)

证明SelectedLanguageAddQuestionModel的值是一个字符串,它应该有效。

如果模型绑定器可以找到值并正确转换或映射,它将起作用。

如果页面模型视图与操作方法不同,则有3个选项: