希望有一个人可以帮助我,这可能是一个简单的问题,但因为没有解决方法而让我感到沮丧,
我想通过模型绑定将值从隐藏字段传递给控制器, 无论我使用什么方法,只需通过模型将值从视图传递给控制器就可以了,
这是我的滑块范围
<label for="amount">دامنه قیمت:</label>
<div id="connect" class="noUi-target noUi-ltr noUi-horizontal noUi-background">
</div>
&#13;
这是隐藏的字段,
<input type="hidden" name="MinPrice" value="@Model.MinPrice" id="MinPrice" />
<input type="hidden" name="MaxPrice" value="@Model.MaxPrice" id="MaxPrice" />
&#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;
这是我的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。
被修改 我不允许悲伤地上传图片,如果我看到的一切都很明显, 无论如何,我解释一下细节:
当我更改slideBar时,我的JS会触发并更改值,
当我点击搜索按钮时,我的模型中的所有字段都是字段,除了这两个字段,我的意思是MinPrice和MaxPrice
结果显示一个空页面,我的Js再次被触发然后回到默认值,
在最后一次尝试中我将隐藏字段更改为type =&#34; text&#34; 并且看到当我更改滑动条时,该值在我的文本框中,但在触摸搜索按钮时没有绑定到我的视图模型。
我确定我的viewmodel有问题,但我怎么能理解什么是错误的:(请好好看看我的代码
答案 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...
*/
}