मेरे पास आंशिक दृश्य है जिसका उपयोग रेज़र में तालिका के कॉलम में चेकबॉक्स दिखाने के लिए किया जाता है। जब मैं तालिका में किसी भी चेकबॉक्स पर क्लिक करता हूं तो यह पहली पंक्ति की आईडी के साथ नियंत्रक को वापस पोस्ट करता है, न कि उस पंक्ति की आईडी जिसमें चेक-बॉक्स निहित होता है। अजाक्स अनुरोध पोस्ट करने के लिए जावास्क्रिप्ट फ़ंक्शन "SaveChanges" है जैसा कि नीचे दिया गया है। छिपा हुआ क्षेत्र "RecurrenceScheduleId" प्राथमिक कुंजी आईडी है।
क्या मुझसे यहां कुछ गलत हो रहा है?
- मेरे विचार और नियंत्रक कार्रवाई निम्नलिखित हैं:
@model SMRDS.Model.RecurrenceSchedule
@using (Ajax.BeginForm("_LogOccurancePartial", "Schedule",
new AjaxOptions
{
UpdateTargetId = "tdOccurance",
HttpMethod = "post",
LoadingElementId = "btnProgress",
OnBegin = "dialogBegin",
OnSuccess = "updateSuccess",
OnFailure = "dialogFailure"
},
new { id = "frm-toggle" }))
{
@Html.HiddenFor(model => model.RecurrenceScheduleId)
@Html.CheckBoxFor(m => m.LogOccurences, new { @onclick ="SaveChanges(this)" })
}
<script>
function updateSuccess() {}
function dialogFailure() {}
function dialogComplete() {}
function dialogBegin() {}
function SaveChanges(checkboxInput) {
$.ajax({
type: 'POST',
url: '/Schedule/_LogOccurancePartial',
data: { newValue: checkboxInput.checked, id: $("#RecurrenceScheduleId").val() },
dataType: 'json',
success: function (response) {
//handle success
}
});
}
नियंत्रक कार्रवाई:
public JsonResult _LogOccurancePartial(bool newValue,int id)
{
var result = BLL.Service.RecurrenceSchedules.UpdateLogOccurence(id, newValue);
return Json(new { result = result }, JsonRequestBehavior.AllowGet);
}
अपडेट करें
छिपे हुए क्षेत्रों के लिए प्रदान किया गया एचटीएमएल निम्नलिखित है। वर्तमान में मेरे पास आईडी "40" और "41" के साथ केवल दो पंक्तियां हैं।
<input data-val="true" id="RecurrenceScheduleId"
name="RecurrenceScheduleId" type="hidden" value="40">
<input data-val="true" id="RecurrenceScheduleId"
name="RecurrenceScheduleId" type="hidden" value="41">
1 उत्तर
जब आप हेल्पर्स का उपयोग करते हैं तो यूनिक आईडी बनाए रखना आपकी जिम्मेदारी है।
यदि आपके पास एक मॉडल था
public class ViewModel
{
public int Id { get; set; }
public string Name { get; set; }
}
और आपके विचार में एक संग्रह है जिसमें आप अद्वितीय मानों के साथ आईडी को ओवरराइड करने के लिए इंडेक्स के साथ लूप के लिए उपयोग कर सकते हैं।
@model List<ViewModel>
@for(int i = 0; i < Model.Count(); i++)
{
@Html.HiddenFor(m => Model[i].Id, htmlAttributes: new { id = "item" + item.Id })
}
लेकिन आप अपने क्लिक हैंडलर को भी समायोजित कर सकते हैं ताकि आपको आईडी के आधार पर कोई छिपा हुआ इनपुट खोजने की आवश्यकता न पड़े।
@Html.CheckBoxFor(m => m.LogOccurences,
new { @class="trigger", data_rsid=m.RecurrenceScheduleId })
<script>
$("body").on("click", ".trigger", function(e) {
var rsId = $(this).data("rsid");
var checked = $(this).prop("checked");
var data = { newValue: checked, id: rsId }
$.ajax({ ... });
});
</script>
id
विशेषता मान अद्वितीय होने चाहिए। आपने "RecurrenceScheduleId" को डुप्लिकेट किया है।