【发布时间】:2014-02-03 14:44:51
【问题描述】:
我有一个带有模型的强类型视图,它表示列表中的多个对象。在这个视图中,我生成 Grid,每个对象代表网格中的一行。然后我将此模型列表中的特定对象传递给局部视图。这个局部视图实际上是一个弹出窗口。在弹出窗口中,我有一个表单,用户可以在其中更正一行(一个对象)并提交回 Action,我将更改保存到数据库。当我单击特定的“行”时,如何将特定对象从视图传递到部分视图?
是否可以将特定行的 ID 例如保存到隐藏字段,然后在渲染局部视图或将模型传递给局部视图时从隐藏字段动态读取此值?还是整个概念错了?
查看代码
@model IEnumerable<Loyalty.Models.GridColumns>
@using GridMvc.Html
@using GridMvc.Sorting
<input type="button" id="opener" title="open popup" value="test1"/>
<a onclick="EditUser(1)">edit</a>
@Html.Grid(Model).AutoGenerateColumns()
<div id="EditUser" title="Popravi uporbnika">
@{
//Here I would like to get value from hidden field and change it with value 1
//in a WHERE sentance in the line below
Html.RenderPartial("EditUser", Model.Where(m => m.ID == 1).Single());
}
</div>
<script type="text/javascript">
$("#opener").click(function () {
$("#EditUser").dialog("open");
});
$(function() {
$("#EditUser").dialog({
open: function() {
$("body").addClass("blur");
},
clse: function () {
$("body").removeClass("blur");
},
modal: true,
closeText: "Close",
autoOpen: false,
width: 800,
height: 600
});
});
}
</script>
部分查看代码
@model Loyalty.Models.GridColumns
@using (Ajax.BeginForm("UpdateUser", "Home", new AjaxOptions () { UpdateTargetId="ID", OnSuccess="onSuccess()"}))
{
<fieldset class="PopUp">
<legend class="PopUp">General data</legend>
<div class="EditLabel">
Name:
</div>
<div class="EditValue">
@Html.TextBoxFor(m => m.FirstName)
</div>
<div class="EditLabel">
Last name:
</div>
<div class="EditValue">
@Html.TextBoxFor(m => m.LastName)
</div>
<div class="EditLabel">
Birth date:
</div>
<div class="EditValue">
@Html.TextBoxFor(m => m.BirthDate, "{0:dd-MMM-yyyy}")
</div>
<div class="EditLabel">
Gender:
</div>
<div class="EditValue">
@{
var item1 = new SelectListItem();
item1.Text = "male";
var item2 = new SelectListItem();
item2.Text = "female";
List<SelectListItem> items = new List<SelectListItem>();
items.Add(item1);
items.Add(item2);
var SelectItems = new SelectList(items, "Value", "Text");
}
@Html.DropDownListFor(m => m.Gender, SelectItems)
</div>
</fieldset>
<fieldset class="PopUp">
<legend class="PopUp">Address</legend>
<div class="EditLabel">
Street:
</div>
<div class="EditValue">
@Html.TextBoxFor(m => m.Street)
</div>
<div class="EditLabel">
House no.:
</div>
<div class="EditValue">
@Html.TextBoxFor(m => m.HouseNumber)
</div>
<div class="EditLabel">
Town:
</div>
<div class="EditValue">
@Html.TextBoxFor(m => m.Town)
</div>
<div class="EditLabel">
Post code:
</div>
<div class="EditValue">
@Html.TextBoxFor(m => m.PostNumber)
</div>
</fieldset>
<fieldset class="PopUp">
<legend class="PopUp">Contact info</legend>
<div class="EditLabel">
Phone:
</div>
<div class="EditValue">
@Html.TextBoxFor(m => m.PhoneNumber)
</div>
<div class="EditLabel">
E-mail:
</div>
<div class="EditValue">
@Html.TextBoxFor(m => m.Email)
</div>
</fieldset>
}
主视图操作
public ActionResult Index()
{
var UsersCollection = new List<GridColumns>();
for (int i = 1; i <= 31; i++)
{
bool disc = false;
if (i % 2 == 0)
{
disc = true;
}
else
{
disc = false;
}
UsersCollection.Add(new GridColumns() {ID = i, BirthDate = new DateTime(2014,1,i), Email = "user" + i + "@email.com", FirstName = "User1" + i, LastName = "User1LastName" + i, Gender = "male", Discount = disc, Cupons = i });
}
return View(UsersCollection);
}
部分视图操作
[HttpPost]
public ActionResult UpdateUser(GridColumns person)
{
return PartialView();
}
Partial View action is called when submitting popup form.
型号
[GridTable(PagingEnabled=true, PageSize=20)]
public class GridColumns
{
[GridColumn(Title="ID", SortEnabled=true)]
public int ID { get; set; }
[GridColumn(Title="First name", FilterEnabled=true, SortEnabled=true)]
public string FirstName { get; set; }
[GridColumn(Title = "Last name", FilterEnabled = true, SortEnabled = true)]
public string LastName { get; set; }
[GridColumn(Title = "Birth date", FilterEnabled = true, Width = "150", Format = "{0:dd-MMM-yyyy}")]
public DateTime BirthDate { get; set; }
[GridColumn(Title = "gender", FilterEnabled = true)]
public string Gender { get; set; }
[GridColumn(Title = "e-mail", FilterEnabled = true, SortEnabled = true)]
public string Email { get; set; }
[GridColumn(Title = "Phone", FilterEnabled = true, SortEnabled = true)]
public string PhoneNumber { get; set; }
[GridColumn(Title = "Street", FilterEnabled = true)]
public string Street { get; set; }
[GridColumn(Title = "House no.", FilterEnabled = true)]
public string HouseNumber { get; set; }
[GridColumn(Title = "Town", FilterEnabled = true)]
public string Town { get; set; }
[GridColumn(Title = "Post number", FilterEnabled = true)]
public int PostNumber { get; set; }
}
【问题讨论】:
-
GridColumns 是否包含您所追求的 Id 作为属性?
-
是的。该代码有效,但我想去掉这部分代码
Html.RenderPartial("EditUser", Model.Where(m => m.ID == 1).Single());中的值 1 并将其替换为隐藏字段中的值。
标签: c# asp.net-mvc model partial-views