2009-01-21 84 views
6

我想用JQuery動態地將字段添加到ASP.NET MVC表單。ASP.NET MVC&JQuery動態表單內容

例子:

<script language="javascript" type="text/javascript"> 
    var widgets; 

    $(document).ready(function() { 
     widgets = 0; 
     AddWidget(); 
    }); 

    function AddWidget() { 
     $('#widgets').append("<li><input type='text' name='widget" + widgets + "'/></li>"); 
     widgets++; 
    } 
</script> 

<ul id="widgets"> 
</ul> 

這工作,但我要手動循環在控制器中的表單值:

[AcceptVerbs("Post")] 
public ActionResult AddWidget(FormCollection form) 
{ 
    foreach (string s in form) 
    { 
     string t = form[s]; 
    } 

    return RedirectToAction("ActionName"); 
} 

但它發生在我身上時,我向用戶發送回在控制器中獲取操作我將不得不使用輸入的值設置FormData,然後迭代地使用<%腳本添加小部件。

在當前版本中做什麼最好的方法是什麼(5我相信)?

回答

4

我的解決辦法是這樣的(僞代碼):

<script language="javascript" type="text/javascript"> 
    var widgets; 

    $(document).ready(function() { 
     widgets = 0; 
     <% for each value in ViewData("WidgetValues") %> 
      AddWidget(<%= value %>); 
     <% next %> 
    }); 

    function AddWidget(value) { 
     $('#widgets').append("<li><input type='text' name='widget" + widgets + 
          "'>" + value + "</input></li>"); 
     widgets++; 
    } 
</script> 

<ul id="widgets"> 
</ul> 

和Controller:

[AcceptVerbs("Post")] 
public ActionResult AddWidget(FormCollection form) 
{ 
    dim collValues as new Collection; 
    foreach (string s in form) 
    { 
     string t = form[s]; 
     collValues.add(t) 
    } 
    ViewData("WidgetValues") = collValues; 
    return RedirectToAction("ActionName"); 
} 

可以工作的細節後
(抱歉混合VB與C#,我是一個VB的傢伙)

0

我可能會錯過這裏的觀點,但是,您是否需要通過表單操作將數據實際發送回控制器?爲什麼不使用jquery進行ajax調用以將數據發佈到控制器......或者更好的是Web服務?發送數據異步,並且不需要重建視圖與發送的數據值。

這工作正常,如果價值被消耗,並再也沒有使用,但是,如果你計劃持續的數據和曲面通過該觀點認爲,你的模型應該真的支持數據結構。在模型上可能是Dictionary<string, string>

+0

對於提交表單數據,腳本並不是真的可接受的,應用程序必須在沒有啓用腳本的情況下正常退化。 – blu 2009-04-30 19:34:59

0

我不是一個ASP.net開發人員,但我從PHP,你可以使用數組作爲名字輸入字段

防爆知道:

<input type="text" name="widgets[]" /> 
<input type="text" name="widgets[]" /> 

您可以再通過交變小部件遍歷就好像它是一組值。

沒有與dynamicaly命名的變量等

0

據我理解這個問題是在小部件保留貼值亂搞。 我希望你可以渲染那些在視圖渲染期間不會在服務器上填充的widget。