سؤال

لدي إعداد طريقة العمل:

public ActionResult Delete(IList<Product> products)

وجدول المنتجات في رأيي. لقد حصلت على نموذج ملزم يعمل بحيث على إرسال يمكنني ملء products قائمة. ولكن أود أن أملكه مع المنتجات المحددة فقط عبر مربع اختيار.

أعتقد أنني أستطيع القيام بذلك عن طريق تغيير طريقة العمل إلى هذا:

public ActionResult Delete(IList<Product> products, IList<int> toDelete)

وإصدار قائمة خانات الاختيار إلى toDelete ولكن أود حقا تجنب تغيير توقيع الطريقة إذا كان ذلك ممكنا.

هل هناك طريقة لتمرير العناصر المحددة فقط؟ أو سأضطر إلى كتابة moderbinder مخصص؟

هل كانت مفيدة؟

المحلول

أنا لا أفهم لماذا لا ترغب في تغيير التوقيع، ولكن إذا كنت لا تفعل ذلك حقا، فما عليك سوى الوصول إلى ViewData ["Todelete"] أو

int[] toDelete;
UpdateModel(toDelete, "toDelete");

أو

public class FormViewModel { 
   IList<Product> Products {get;set;}
   int[] ToDelete {get;set;} 
}

var viewmodel = new FormViewModel();
UpdateModel(viewmodel, new[]{"Products", "ToDelete"});

نصائح أخرى

يمكنك دائما استخدام قيمة مربع الاختيار للإشارة إلى ما إذا كنت تريد حذف العنصر أم لا.

يرتبط اسم هذه القيمة بممتلكات في فئة المنتج الخاصة بك.

<form>
    <% for(int i = 0; i < products.Count) { %>
      <div>
        <input type="hidden" name='<%=string.Format("products[{0}].Property1", i) %>' value='<%= products[i].Property1 %>' />
        <input type="hidden" name='<%=string.Format("products[{0}].Property2", i) %>' value='<%= products[i].Property2 %>' />
        <input type="hidden" name='<%=string.Format("products[{0}].Property3", i) %>' value='<%= products[i].Property3 %>' />
        <input type="checkbox" name='<%=string.Format("products[{0}].ToDelete", i) %>' value='true' />
      </div>
    <% } %>
</form>

ثم، عندما تصل إلى حذفك ()، يمكنك القيام بشيء مثل:

products = products.Where(x=>x.ToDelete == false).ToList();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top