[英]Dynamically Add Form Elements in MVC3 Razor Create View
我想創建一個帶有一組文本框的表單,每次用戶單擊添加按鈕時,這些文本框將在用戶單擊添加按鈕時重新創建。 這是我想要做的事情的圖片。
//
// GET: /Client/MyMove/Create
public ActionResult Create()
{
return View();
}
//
// POST: /Client/MyMove/Create
[HttpPost]
public ActionResult Create(Move move)
{
var viewModel = new CreateMoveViewModel();
MembershipUser currentUser = Membership.GetUser();
Guid currentUserId = (Guid)currentUser.ProviderUserKey;
if (ModelState.IsValid)
{
move.UserId = currentUserId;
db.Moves.Add(move);
move.AddMoveItem(2);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(move);
}
@model MovinMyStuff.WebUI.Areas.Client.Models.CreateMoveViewModel
@using Telerik.Web.Mvc.UI
@{
ViewBag.Title = "Create";
}
<h1>Post a Move</h1>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"> </script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<div class="form-item-group last">
<div class="form-item half">
<div class="editor-label">
Start Date
</div>
Editorfor for Model1...
<div>
@Html.Partial("_MoveItem")
</div>
</fieldset>
<div class="submit-button-wrapper">
<input class="button" type="submit" value="Post" />
</div>
}
<div>
@Html.ActionLink("Go Back", "Index", null, new { @class = "link-text" })
</div>
namespace MovinMyStuff.WebUI.Areas.Client.Models
{
public class CreateMoveViewModel
{
public CreateMoveViewModel()
{
Moves = new Move();
MoveItems = new MoveItem();
}
public Move Moves { get; set; }
public MoveItem MoveItems { get; set; }
}
}
@model MovinMyStuff.Domain.Entities.MoveItem
<div class="editor-label">
Choose Area of Your Home
</div>
<div class="editor-field">
@Html.EditorFor(model => model.MoveItemArea)
@Html.ValidationMessageFor(model => model.MoveItemArea)
</div>
<div class="editor-label">
Choose Your Item
</div>
<div class="editor-field">
@Html.EditorFor(model => model.MoveItemType)
@Html.ValidationMessageFor(model => model.MoveItemType)
</div>
<div class="editor-label">
Quantity
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Quantity)
@Html.ValidationMessageFor(model => model.Quantity)
</div>
Other Properties of model...
<div class="editor-label">
@Html.HiddenFor(model => model.MoveId)
</div>
我強烈邀請您閱讀以下文章。 它包含一個示例,說明如何實現您正在尋找的目標。 它涵蓋了您在開始實施此默認模型綁定器時將遇到的挑戰。 為了克服集合索引的這些挑戰,作者使用了一個自定義的Html.BeginCollectionItem
助手。
好吧,我將嘗試使用您需要的模型創建一個局部視圖,關鍵是在每次單擊帶有 ajax 的按鈕時添加從局部視圖生成的 html,例如:
你的模特
public class example
{
public int Length { get; set;}
public int Width { get; set;}
public int Height {get; set;}
}
你的行動
public ActionResult Example()
{
return View();
}
你的部分觀點
@model FooExample.Model.Example
@{
Layout = null;
}
<div>
@Html.EditorFor(model => model.Length)
</div>
<div>
@Html.EditorFor(model => model.Width)
</div>
<div>
@Html.EditorFor(model => model.Height)
</div>
你的主要觀點
<input type="button" id="btnAddRows" />
<table id="addViews">
<tr>
<td>
</td>
</tr>
<table>
現在這是腳本
$(document).ready(function(){
$("#btnAddRows").click(function(){
$.ajax({
url: 'your path to the action',
data : 'if you need to pass parameters',
datatype: 'html',
success: function(data){
$("#addViews").append("<tr/><td>"+data+"</td><tr>");
}
})
});
});
這是對我過去如何實施類似情況的解釋: https : //stackoverflow.com/a/10583792/1373170
它更復雜,因為它也需要支持編輯和刪除。 主要思想是有一個隱藏模板(用EditorTemplate
創建),用於創建新行,以及一些 JavaScript 來自動命名所有新項目,以一種將由 MVC 的默認綁定器自動解釋的方式,並轉換為動作中適當的 ViewModel 列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.