我尝试创建一个asp.net mvc3应用程序。
以下是我的观点:
@model Iads.Elrams.Data.Entities.Page
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<div class="formElement">
<div class="formFieldLabel">
@Html.LabelFor(model => model.ExternalLink)
</div>
<div class="formField">
@Html.TextBoxFor(model => model.ExternalLink, new { style = "width:400px" })
</div>
</div>
<div class="border content">
<div id="tabs" style="margin-top: 20px;"> <!-- jquery UI -->
<div class="tabMenu">
<ul>
@foreach (Iads.Elrams.Data.Entities.Language lang in ViewBag.Languages) {
<li><a href="#@lang.Iso2">@lang.Name</a></li>
}
</ul>
</div>
@{
foreach (Data.Entities.Language lang in ViewBag.AvailableLanguages) {
<div id="@lang.Iso2" class="border tabMenuContent">
<div class="formElement">
<div class="formFieldLabel">
@Html.LabelFor(model => model.GetTextOrDefaultByLang(lang.Iso2).Title) * <!-- Object: PageText -->
</div>
<div class="formField">
@Html.EditorFor(model => model.GetTextOrDefaultByLang(lang.Iso2).Title, new { style = "width:400px" })
</div>
</div>
<div class="formElement">
<div class="formFieldLabel">
@Html.LabelFor(model => model.GetTextOrDefaultByLang(lang.Iso2).NavText) *
</div>
<div class="formField">
@Html.EditorFor(model => model.GetTextOrDefaultByLang(lang.Iso2).NavText, new { style = "width:400px" })
</div>
</div>
</div>
}
}
</div>
<p>
<input type="submit" value="save" class="button" />
<input type="button" class="lightbutton" value="cancel" onclick="location.href = '@Url.RouteUrl(new RouteValueDictionary(new {
area = "Cms",
controller = "Page",
action = "Index"
}))';" />
</p>
</div>
}
这是我的页面控制器:
public ActionResult Edit(int id) {
Page page = pageRepository.GetById(id);
if(page == null)
return new HttpNotFoundResult();
IEnumerable languages = languageRepository.GetAll();
languages = languages.OrderBy(m => m.LanguageId);
ViewBag.AvailableLanguages = languages;
return View(page);
}
[HttpPost]
public ActionResult Edit(what are the parameters???) {
// ?????
return View(page);
}
我想将页面作为参数,但这不适用于PageTexts !!
我的参数是什么?我的方法应该怎么样?
任何帮助都将不胜感激。
谢谢!
答案 0 :(得分:0)
我认为在您的情况下,您可以将参数设为Iads.Elrams.Data.Entities.Page
。您也可以将其设为FormCollection
并以此方式获取请求项。
以下是我所做的几种更新类型方法:
<HttpPost()>
Function Transfer(ByVal collection As FormCollection)
...
End Function
<HttpPost()>
Function Update(ByVal visit As VisitSummaryViewModel)
...
End Function
答案 1 :(得分:0)
//
// GET: /controllername/Edit/
public ActionResult Edit()
{
var langer = from lang in globalizationdb.langs select langs;
ViewData["listlang"] = langer;
}
//
// POST: /controllername/Edit/
[HttpPost]
public ActionResult Edit(int id, FormCollection collection) {
//dbcontext //dbname //id field
var languages = globalizationdb.lang.Where(x => x.lang_id == id).Single();
long langish = Convert.ToInt64(collection["langfield"]);
//get the lang id , im asuming u gonna use dropdownlist for lang...
lang.lang_id = langish;
//dbcontext
globalizationdb.SubmitChanges();
return RedirectToAction("Index");
}
也在View ///控制器名称应该没有blabla“控制器”在最后像CatController应该只是Cat ..
@using (Html.BeginForm("Edit", "yourControllername", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div class="editor-label">Lang ID</div>
<div class="editor-field">
//lang field as dropdownlist
@Html.DropDownList("langfield", new SelectList((System.Collections.IEnumerable)ViewData["listlang"], "lang_id", "lang_name",Model.lang))
@Html.ValidationMessageFor(model => model.lang_id)
</div>
}
在表单开始使用FormMethod.Post, new { enctype = "multipart/form-data" }
后,您可以使用FormCollection方法。
你也可以将它用于你自己制作的db ..
答案 2 :(得分:0)
您可以使用FormCollection并处理键值对,但这不是一个优雅的解决方案。我建议使用与您的Iads.Elrams.Data.Entities.Page
不同的单独视图模型类,然后您可以使用AutoMapper之类的库来帮助您映射值。视图模型和数据库模型可以有很大的不同,通过设计不同的类(验证,自定义逻辑等)可以获得更大的灵活性。
在您的情况下,我将创建一个包含PageLanguageViewModel类集合的PageViewModel类。此外,在视图中我将使用“for(i = 0; ...)”循环,以便html输入扩展方法将为此集合创建适当的名称和ID。而你的post参数将是PageViewModel类的一个实例。 ASP.NET Mvc模型绑定也适用于集合类型。但是,在视图中动态删除或添加项目时有一个技巧,因为您必须维护正确的索引。