如何通过模型绑定将隐藏字段发送到控制器

时间:2016-08-11 11:50:33

标签: javascript asp.net-mvc model-binding hidden-field nouislider

希望有一个人可以帮助我,这可能是一个简单的问题,但因为没有解决方法而让我感到沮丧,

我想通过模型绑定将值从隐藏字段传递给控制器​​, 无论我使用什么方法,只需通过模型将值从视图传递给控制器​​就可以了,

这是我的滑块范围



<label for="amount">دامنه قیمت:</label>
<div id="connect" class="noUi-target noUi-ltr noUi-horizontal noUi-background">

</div>
&#13;
&#13;
&#13;

这是隐藏的字段,

&#13;
&#13;
<input type="hidden" name="MinPrice" value="@Model.MinPrice" id="MinPrice" />
<input type="hidden" name="MaxPrice" value="@Model.MaxPrice" id="MaxPrice" />
&#13;
&#13;
&#13;

&#13;
&#13;
< script >
  var connectSlider = document.getElementById('connect');

noUiSlider.create(connectSlider, {
  start: [40000, 800000],
  connect: true,
  range: {
    'min': 0,
    'max': 2000000
  }
}); < /script>
        <script>
            var connectBar = document.createElement('div'),
                connectBase = connectSlider.querySelector('.noUi-base');

            / / Give the bar a class
for styling and add it to the slider.
connectBar.className += 'connect';
connectBase.appendChild(connectBar);

connectSlider.noUiSlider.on('update', function(values, handle, a, b, handlePositions) {

  var offset = handlePositions[handle];

  // Right offset is 100% - left offset
  if (handle === 1) {
    offset = 100 - offset;
  }

  // Pick left for the first handle, right for the second.
  connectBar.style[handle ? 'right' : 'left'] = offset + '%';
}); < /script>
        

        <script>


            var valueInput = document.getElementById('MinPrice'),
                valueSpan = document.getElementById('MaxPrice');

            / / When the slider value changes, update the input and span
connectSlider.noUiSlider.on('update', function(values, handle) {
  if (handle) {
    valueInput.value = values[handle];
  } else {
    valueSpan.innerHTML = values[handle];
  }
});

// When the input changes, set the slider value
valueInput.addEventListener('change', function() {
  connectSlider.noUiSlider.set([null, this.value]);
});


< /script>
&#13;
&#13;
&#13;

这是我的JS填充隐藏字段,这两个字段填写正确,但不通过模型将数据发送到控制器,

谢谢大家,

更新

这是我的模特:

 public class SearchModel
{
    public string Devision { get; set; }
    public string Gender { get; set; }
    public int? MinPrice { get; set; }
    public int? MaxPrice { get; set; }
    public string Brand { get; set; }
    public string Sport { get; set; }
    public string Size { get; set; }
    public string ProductGroup { get; set; }
    public List<tblSiteItem> Result { get; set; }
    public List<tblSiteItem> Sales { get; set; }
    public List<string> Devisions { get; set; }
    public List<string> Genders { get; set; }
    public List<string> Brands { get; set; }
    public List<string> Sports { get; set; }
    public List<string> Sizes { get; set; }
    public List<string> ProductGroups { get; set; }
    public List<tblSiteCart> CartItems { get; set; }
    public int PageNo { get; set; }
    public int Barcode { get; set; }
}

正如我所说,正确填充了值,所以我不需要代码来纠正它,只是不要将hdnValue绑定到我的模型中的字段。 我的意思是MinPrice和MaxPrice。

被修改 我不允许悲伤地上传图片,如果我看到的一切都很明显, 无论如何,我解释一下细节:

  1. 当我更改slideBar时,我的JS会触发并更改值,

  2. 当我点击搜索按钮时,我的模型中的所有字段都是字段,除了这两个字段,我的意思是MinPrice和MaxPrice

  3. 结果显示一个空页面,我的Js再次被触发然后回到默认值,

  4. 在最后一次尝试中我将隐藏字段更改为type =&#34; text&#34;   并且看到当我更改滑动条时,该值在我的文本框中,但在触摸搜索按钮时没有绑定到我的视图模型。

    我确定我的viewmodel有问题,但我怎么能理解什么是错误的:(请好好看看我的代码

4 个答案:

答案 0 :(得分:0)

使用此代码获取值:

var userRole = "";
userRole = $("#hdnVal").val();
alert(userRole);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="hidden" id="hdnVal" value="@Model.MinPrice" />

答案 1 :(得分:0)

关注此事。

在.cshtml页面

  

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <input type="hidden" id="hdnVal" value="@Model.MinPrice" /> <input type="button" name="Submit" value="Submit" id="btnSubmit" class="btn btn-primary" />

<强>的js

var userRole = "";
userRole = $("#hdnVal").val();
alert(userRole);
$('#btnSubmit').click(function() {
      var formData = new FormData();
      formData.append("userRole ", userRole);
      $.ajax({
        type: "POST",
        url: "/Controller/YourAction/",
        data: formData,
        dataType: 'json',
        contentType: false,
        processData: false,
        success: function(result) {
          if (result.Message == "success") {
            alert("Success");
          }
        }
      });

    }

C#代码

public JsonResult YourAction()
{
string Role = Request.Form["userRole "];
//You can get the value of role
}

答案 2 :(得分:0)

输入的名称不正确。您应该从中删除Model.部分。如果您使用HtmlHelper.HiddenFor,则会获得以下内容:

<input type="hidden" name="MaxPrice" value="@Model.MaxPrice" id="MaxPrice" />

这样,输入就会正确地提交给您的模型。

查看this answer

答案 3 :(得分:0)

我遇到了同样的问题,经过多次测试后,我发现解决方案通过ajax发送值,但是以字符串JSON格式构建请求数据,其中隐藏字段没有单引号,其他字段带单引号。下面是示例。我希望这个变体可以帮助你。

将数据发送到控制器的JavaScript代码

            $("#saveSearchModel").on("click", function (e) {
                e.preventDefault();
                // Variables for fields values
                var devision = $("#Devision").val();
                var gender = $("#Gender").val();
                var minPrice = $("#MinPrice").val();
                var maxPrice = $("#MaxPrice").val();
                var brand = $("#Brand").val();
                /*
                   Get the other fields...
                */
                // Data for pass to controller via ajax
                var data1 = "{'Devision':'" + devision + "','Gender':'" + gender + "',MinPrice:" + minPrice + ",MaxPrice:" + maxPrice + ",'Brand':'" + brand + /*Add the other fields...*/ + "'}";

                $.ajax({
                    url: '/Controller/Action1',
                    type: 'POST',
                    contentType: "application/json; charset=utf-8",
                    data: data1,
                    success: function (result) {
                        // Do something
                    }
                });
            });

控制器中用于接收数据的代码

            [HttpPost]
            public void Action1(SearchModel model)
            {
                // Gets the values of model
                string devision = model.Devision;
                string gender = model.Gender;
                int? minPrice = model.MinPrice;
                int? maxPrice = model.MaxPrice;
                string brand = model.Brand;
                /*
                    Gets the others values of model...
                */
            }