我希望能够通过它的ViewModel为我的联系人添加多个(零个或多个)手机。
我写这个:
public class ContactsViewModel
{
public string Skype { get; set; }
public string Email { get; set; }
public string Addr { get; set; }
public IEnumerable<PhoneViewModel> Phones { get; set; }
}
public class PhoneViewModel
{
public string Number { get; set; }
}
但是,正如预期的那样,它不起作用。 组织这个的最佳方法是什么?
修改即可。以下是我的观点:
@model RentSite.Web.UI.Models.ContactsViewModel
@{
ViewBag.Title = "AddContact";
}
<h2>AddContact</h2>
@using (Html.BeginForm())
{
@Html.EditorForModel(Model)
@Html.Action("AddPhone")
<input type="submit" value="Add"/>
}
和
@model RentSite.Web.UI.Models.PhoneViewModel
@Html.EditorForModel(Model)
这是我的控制器:
public ActionResult Index()
{
return View(unitOfWork.contactRepository.All().ToList());
}
[Authorize]
public ActionResult AddContact()
{
return this.View();
}
[Authorize]
public ActionResult AddPhone()
{
return PartialView();
}
[Authorize]
[HttpPost]
public ActionResult AddContact(ContactsViewModel contact, IEnumerable<PhoneViewModel> phones)
{
contact.Phones = phones;
return RedirectToAction("AddContact");
}
答案 0 :(得分:1)
多个电话号码的呈现将按预期工作。我猜你在发布“发布”多个电话号码的问题。
解决方案取决于您想要实现的目标。以下是两个例子:
解决方案1:用户目前只能发布一个电话号码。渲染所有现有的电话号码,并根据PhoneViewModel创建表单。
解决方案2:用户可以添加多个电话号码并同时发布所有电话号码。你需要一些Javascript。实现客户端功能,允许用户“添加”电话号码字段。使用javascript,唯一地命名每个输入字段(即phone1,phone2,... phonen)。使用相同的模式服务器端从POST数据中获取所有电话号码。
还有更多解决方案。请说明您想要达到的目标。
编辑:解决方案2的示例代码
[HttpPost]
public ActionResult PostPhoneNumbers(FormCollection formCollection)
{
var phoneNumbers =
from k in formCollection.AllKeys
where k.StartsWith("phoneNumber")
select formCollection[k];
// validate and process the phone numbers
return View("your view");
}
enter code here