i have view different fields in loop. depending on model should create fields counts loop. here example page:
_________ ___________ _________ |connector| |searchinput| |selection| |_________| |___________| |_________| ________________ ________________ |add search field| |sub search field| |_b_u_t_t_o_n____| |_b_u_t_t_o_n____| the view class looks like:
@model modelle.models.searchmodel <table> @for (int = 0; < (int)model.searchcount; i++) { <tr> <th>@if (i > 0) {<select name="connectorlist" id="connectorlist"> <option value="and" @(model.connectorlist.elementat(i - 1).equals("and") ? "selected" : "")>and</option> <option value="or" @(model.connectorlist.elementat(i - 1).equals("or") ? "selected" : "") >or</option> <option value="nand" @(model.connectorlist.elementat(i - 1).equals("nand") ? "selected" : "") >nand</option> <option value="nor" @(model.connectorlist.elementat(i - 1).equals("nor") ? "selected" : "") >nor</option> </select>} </th> <th> <input name="searchinput" id="searchinput" type="text" value="@(model.searchlist.elementat(i) string)" /></th> <th> <select name="selectionlist" id="selectionlist"> @for (int j = 0; j < model.selectedlist.count(); j++) {<option value="@j" @(model.selection.elementat(i).equals(j) ? "selected" : "")>@(model.selectedlist.elementat(j).name string)</option> } </select> </th> </tr>} </table> <p> <button name="button" type="button" onclick="addsearchfield()">add 1 more search field</button> <button name="button" type="button" onclick="subsearchfield()">remove 1 search field</button> here jquery code buttons:
function addsearchfield() { var value1 = $('#searchinput').val(); var value2 = $('#selectionlist').val(); var value3 = $('#connectorlist').val(); $.ajax({ url: "@url.action("addsearchfield", "search")", type: 'post', chache:false, data: 'searchinput=' + value1 + '&selectionlist=' + value2 + '&connectorlist=' + value3, success: function (response) { $('#opensearchinput').html(response); }, }); } function subsearchfield() { var value1 = $('#searchinput').val(); var value2 = $('#selectionlist').val(); var value3 = $('#connectorlist').val(); $.ajax({ url: "@url.action("subsearchfield", "search")", type: 'post', chache: false, data: 'searchinput=' + value1 + '&selectionlist=' + value2 + '&connectorlist=' + value3, success: function (response) { $('#opensearchinput').html(response); }, }); } and controller code:
public partialviewresult addsearchfield(list<string> searchinput, list<int> selectionlist, list<string> connectorlist) { searchmodel searchmodel = new searchmodel(); if (connectorlist == null) { connectorlist = new list<string>(); } searchmodel.connectorlist = connectorlist; searchmodel.selection = selectionlist.tolist(); searchmodel.selectedlist = setsearchfields(); list<string> searchlist = new list<string>(); int row = searchinput.count(); searchmodel.searchlist = searchinput.tolist(); searchmodel.searchlist.add("search"); searchmodel.searchcount = row + 1; searchmodel.connectorlist.add("and"); searchmodel.selection.add(0); return partialview("searchinput", searchmodel); } public partialviewresult subsearchfield(list<string> searchinput, list<int> selectionlist, list<string> connectorlist) { searchmodel searchmodel = new searchmodel(); if (connectorlist == null) { connectorlist = new list<string>(); } searchmodel.connectorlist = connectorlist; searchmodel.selection = selectionlist.tolist(); searchmodel.selectedlist = setsearchfields(); list<string> searchlist = new list<string>(); int row = searchinput.count(); searchmodel.searchlist = searchinput.tolist(); if (searchinput.count() > 1) { searchmodel.searchlist.removeat(searchinput.count() - 1); searchmodel.searchcount = row - 1; searchmodel.connectorlist.removeat(connectorlist.count() - 1); searchmodel.selection.removeat(selectionlist.count() - 1); } else { searchmodel.searchcount = row; } return partialview("searchinput", searchmodel); } if load page has 1 search line. if press button "add 1 more search field" added 1 line. if click second time nothing happens. if click "remove 1 search field button (anytime) second fields disappear. in debug mode, can see in controller everytime lists count 1.
did know i´m mistaken? know easier way add lines? have send inputs later controler search in database different rules depending on inputs.
you using
<input name="searchinput" id="searchinput" type="text" value="@(model.searchlist.elementat(i) string)" /> and other form elements in loop.
therefore in dom, rendering multiple fields same ids('searchinput','connectorlist','selectionlist')
var value1 = $('#searchinput').val(); assigns 1 string value value1,
data: 'searchinput=' + value1 here value1 have 1 stirng.
remove ids form elements change ajax call as
$.ajax({ url: "@url.action("subsearchfield", "search")", type: 'post', cache: false, data: $('#the form tag id').serialize(), success: function (response) { $('#opensearchinput').html(response); }, });
Comments
Post a Comment