2015-03-03 15 views
5

Öğeleri dinamik olarak eklemek istediğim öğelerin bir listesi/tablosu olan bir Jilet formu var. Bir açılır listeden öğeleri seçebilir, "Ekle" butonuna tıklayabilir ve açılan listeden öğeye eklenecektir. Daha sonra formumu gönderdiğimde POST aracılığıyla tüm bunların gönderilmesini isterdim ve denetleyicimin HttpPost yöntemini kullanarak giriş yapabilir.Dinamik Şekilde Tıraş Formuna Ekle

HttpPost işlevinde alanları dinamik olarak ekleyip hala argüman olarak kabul edebilecek bir yol var mı?

cevap

2

Her combobox/hiddenfield/textbox/... <form> öğesinin içine dahil edilir. Onları anında yaratırsanız veya varsayılan olarak hazır bulundurursanız gerçekten farketmez. Ancak en büyük fark, dinamik olarak yaratılanlarla, alıştığımız düzgün ciltlemeyi gerçekten kullanamazsınız. Doğrulamayı vs. elle yapmanız gerekir.

Sonra böyle bir yöntemi olur:

public ActionResult HandleMyPost(FormCollection form) 
{ 
    // enumerate through the FormCollection, perform validation etc. 
} 

FormCollection on MSDN

10

ilk cevap bu doğrudur sen içinde dinamik olarak eklenen alanların değerlerini almak için bir form koleksiyonu adımlayabilirsiniz form öğeniz Ben sadece düzgün bir bağlayıcıkullanabileceğinizi eklemek istedim.

Aşağıdaki kod, eylemle ilgili olarak yayınlanan metin kutularının dinamik listesini kabul eder. Bu örnekte her metin kutusu dynamicField ile aynı ada sahipti. MVC bunları bir dizi dizeye güzelce bağlar.

Tam NET Fiddle: Bir yayında dinamik alanlar kabul eylemden https://dotnetfiddle.net/5ckOGu

Örnek kod (netlik için parçacıkları) dinamik olarak ekleyerek örnek alanlar

  @using (Html.BeginForm()) 
      { 
       @Html.AntiForgeryToken() 

       <div id="fields"></div> 

       <button>Submit</button> 
      } 


      <div style="color:blue"><b>Data:</b> @ViewBag.Data</div> 

    <script type="text/javascript"> 

     $(document).ready(function() { 
      var $fields = $('#fields'); 
      $('#btnAddField').click(function(e) { 
       e.preventDefault(); 
       $('<input type="text" name="dynamicField" /><br/>').appendTo($fields); 
      }); 
     }); 

    </script> 

örnek kodu. çıkış

sample screenshot

arasında

[HttpPost] 
    public ActionResult Index(string[] dynamicField) 
    { 
     ViewBag.Data = string.Join(",", dynamicField ?? new string[] {}); 
     return View(); 
    } 

Ekran

İlgili konular