मेरे पास आंशिक दृश्य है जिसका उपयोग रेज़र में तालिका के कॉलम में चेकबॉक्स दिखाने के लिए किया जाता है। जब मैं तालिका में किसी भी चेकबॉक्स पर क्लिक करता हूं तो यह पहली पंक्ति की आईडी के साथ नियंत्रक को वापस पोस्ट करता है, न कि उस पंक्ति की आईडी जिसमें चेक-बॉक्स निहित होता है। अजाक्स अनुरोध पोस्ट करने के लिए जावास्क्रिप्ट फ़ंक्शन "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">
0
Robin 26 जून 2016, 01:17
क्या आपके पास अपने प्रस्तुत एचटीएमएल में डुप्लीकेट आईडी हैं?
 – 
Jasen
26 जून 2016, 01:29
, छिपे हुए क्षेत्रों के लिए प्रदान किया गया HTML निम्नलिखित है। वर्तमान में मेरे पास आईडी "40" और "41" के साथ केवल दो पंक्तियां हैं। <इनपुट डेटा-वैल = "सच" डेटा-वैल-नंबर = "फ़ील्ड रिकरेंस शेड्यूल आईडी एक संख्या होनी चाहिए।" data-val-required="RecurrenceScheduleId फ़ील्ड आवश्यक है।" id="RecurrenceScheduleId" name="RecurrenceScheduleId" type="hidden" value="40">
 – 
Robin
26 जून 2016, 01:40
आपको इसे अपने प्रश्न में संपादित करना चाहिए। पढ़ने में आसानी होगी।
 – 
Jasen
26 जून 2016, 01:47
तत्व id विशेषता मान अद्वितीय होने चाहिए। आपने "RecurrenceScheduleId" को डुप्लिकेट किया है।
 – 
Jasen
26 जून 2016, 02:08
ठीक है, लेकिन मैंने आईडी फ़ील्ड के लिए @Html.HiddenFor(model => model.RecurrenceScheduleId) का उपयोग किया है, इसलिए वे समान हैं। क्या कोई तरीका है जिसके द्वारा मैं आईडी को चेकबॉक्स से भी जोड़ सकता हूं जो एक बूलियन संपत्ति से जुड़ा हुआ है।
 – 
Robin
26 जून 2016, 02:20

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>
0
Jasen 26 जून 2016, 03:01