У меня может быть Один тег form в Другом в ASP.net MVC RC2

Я в настоящее время Разрабатываю приложение в MVC2, который я имею, хотят к используемым mutiple тегам form в Моем приложении, По моему мнению, я Составил таблицу, которая имеет опцию Delete, которую я делаю через Сообщение для Человека, Удаляют так, я имею, Создают тег form для каждой кнопки. я также хочу, чтобы пользователь дал опцию удалить записи mutiple, таким образом, я предоставляю им флажки. Эта форма должна иметь все значения флажков и так далее. таким образом, форма получает рендеринг Как это

поскольку Каждый удаляет кнопку

 <form action="/Home/MutipleDelete" method="post">   
<input class="button " name="Compare" type="submit" value="Mutipledelete" style="margin-right:132px;"  />

<input id="chk1" name="chk1" type="checkbox" value="true" />

<form action="/Home/Delete" method="post"> 

    <input type="submit"  class="submitLink"  value="member1" />

     <input type="hidden" name="hfmem1" id="hfmem1" value="1"  />  

                 </form>
<input id="chk2" name="chk2" type="checkbox" value="true" />

<form action="/Home/Delete" method="post"> 

    <input type="submit"  class="submitLink"  value="member2" />

     <input type="hidden" name="hfmem2" id="hfmem2" value="2"  />  

                 </form>


           </form>

Следующее не работает. но ЕСЛИ я пишу свой код та форма рендеринг таким образом

    <form action="/Home/MutipleDelete" method="post">   

<input class="button " name="Compare" type="submit" value="Mutipledelete" style="margin-right:132px;"  />
</form>
<input id="chk1" name="chk1" type="checkbox" value="true" />

<form action="/Home/Delete" method="post"> 

    <input type="submit"  class="submitLink"  value="member1" />

     <input type="hidden" name="hfmem1" id="hfmem1" value="1"  />  

                 </form>
<input id="chk2" name="chk2" type="checkbox" value="true" />

<form action="/Home/Delete" method="post"> 

    <input type="submit"  class="submitLink"  value="member2" />

     <input type="hidden" name="hfmem2" id="hfmem2" value="2"  />  

                 </form>

это работает в Mozilla, но не в IE.I имеют отладку и Проверенные значения в formcollection В contoller. Что сделать.?

5
задан skaffman 6 March 2010 в 11:48
поделиться

5 ответов

В XHTML форма в форме не разрешена и на самом деле не имеет смысла.

Чтобы выполнить то, что вы пытаетесь сделать, вы должны использовать простые ссылки / кнопки в своей таблице. Они могут, например, отправить запрос на удаление на ваш сервер и, после успешного завершения запроса, также удалить запись из пользовательского интерфейса с помощью jQuery.

Пример:

    [Authorize]
    [HttpPost]
    public JsonResult Delete(Guid id)
    {
         // do stuff, delete the item
         return Json(succeeded ? Id.ToString() : "error");
    }

в представлении

<a href="#" onclick="$.post('/Stuff/Delete/' + id, function(data) { deleteCallback(data); }); return false;">delete</a>

function deleteCallback(data)
{
  if(data=="error"){
    /* error handler for UI */
  }
  else {
    /*remove the entry from the user interface*/
  }
};

Если вы хотите выполнить множественное удаление, вы не должны передавать список идентификаторов для удаления с помощью URL-адреса (потому что в IE есть ограничение 2k, и это выглядит неприятно) , но вместо этого используйте следующий синтаксис:

arrayVariable = new Array(); 
// fill array with ids associated to checked checkboxes' entries
$.post('/Stuff/Delete/' + id, {'IdsToDelete' : arrayVariable }, function(data) { deleteCallback(data); }); return false;">

Это может быть автоматически сериализовано в реальный список .NET, поэтому вам просто нужно будет перебирать список целых чисел или GUID, или как бы там ни выглядел ваш PK!

РЕДАКТИРОВАТЬ: Это все еще немного упрощено. По соображениям безопасности вам следует защитить себя от CSRF (подделки межсайтовых запросов). Дарин дал отличный ответ, как это сделать .

Это добавит [ValidateAntiForgeryToken] к методу вашего контроллера, и представление должно содержать что-то вроде

var token = $('input[name=__RequestVerificationToken]').val();
$.post("/YourUrl", { 'IdsToDelete' : arrayVar, '__RequestVerificationToken': token }, function(data) { deleteCallback(data); });
5
ответ дан 13 December 2019 в 19:25
поделиться

Почему бы просто не использовать одну форму и несколько кнопок отправки? Вам нужно тщательно интерпретировать результат, но это позволит вам сделать это без javascript и без необходимости делать извращенный html.

Возможно, вам придется напрямую читать Request.Params, но с этим достаточно легко справиться.

<form action="<%= Html.Encode(Url.Action("Delete"))%>">
<ul>
<li>Item 1 <input type="submit" id="<%= IDSafe(item_id) %>" name="<%= IDSafe(item_id2) %>" value="Delete" /></li>
<li>Item 2 <input type="submit" id="<%= IDSafe(item_id2) %>" name="<%= IDSafe(item_id2) %>" value="Delete" /></li>
</ul>
<input type="submit" name="deleteall" value="Delete selected" />
</form>
0
ответ дан 13 December 2019 в 19:25
поделиться

Я думаю, что это будет невозможно с помощью post. Так как используя post мы можем найти, какая кнопка submit была нажата, но не сможем найти значение кнопки submit, если мы хотим отобразить некоторое значение для показа пользователю и другое значение, которое мы хотим отправить в базу данных.

в этом случае моя кнопка submit генерируется динамически

<input type="submit" name="submitbutton"   id="<%= Html.Encode(item.ideletevalue) %>" class="submitLink"   value=" <%= Html.Encode(item.deleteitemname)%>"/> 
0
ответ дан 13 December 2019 в 19:25
поделиться

Вложение форм запрещено и может привести к неопределенному поведению между браузерами.

4
ответ дан 13 December 2019 в 19:25
поделиться

Концептуально форма внутри формы на самом деле не имеет смысла. Разве вы не можете использовать ссылки действий вместо кнопок на внутренних формах? Вы все еще можете стилизовать их, чтобы они выглядели как пуговицы.

2
ответ дан 13 December 2019 в 19:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: