Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更新我的模型的HttpPost编辑操作_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 3_Razor - Fatal编程技术网

C# 更新我的模型的HttpPost编辑操作

C# 更新我的模型的HttpPost编辑操作,c#,asp.net,asp.net-mvc,asp.net-mvc-3,razor,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 3,Razor,我尝试创建一个asp.net mvc3应用程序 以下是我的看法: @model Iads.Elrams.Data.Entities.Page @using (Html.BeginForm()) { @Html.ValidationSummary(true) <div class="formElement"> <div class="formFieldLabel"> @Html.LabelFor(mod

我尝试创建一个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>
}
我想将页面作为参数,但这不适用于页面文本

我的参数是什么?我的方法应该是什么样子

任何帮助都将不胜感激


谢谢

我认为在您的例子中,您应该将参数a
Iads.Elrams.Data.Entities.Page
。您还可以将其设置为
FormCollection
,并以这种方式获取请求项

以下是我已经完成的几个更新类型方法:

<HttpPost()>
Function Transfer(ByVal collection As FormCollection)
...
End Function

<HttpPost()>
Function Update(ByVal visit As VisitSummaryViewModel)
...
End Function

函数传递(ByVal集合作为FormCollection)
...
端函数
功能更新(ByVal作为VisitSummaryViewModel访问)
...
端函数
也在考虑之中 ///控制器名称末尾应不带blabla“controller”,就像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>
}
@使用(Html.BeginForm(“Edit”、“yourControllername”、FormMethod.Post、new{enctype=“multipart/formdata”}))
{
朗格ID
//作为下拉列表的lang字段
@DropDownList(“langfield”,新选择列表((System.Collections.IEnumerable)ViewData[“listlang”],“lang\u id”,“lang\u name”,Model.lang))
@Html.ValidationMessageFor(model=>model.lang\u id)
}
在您使用
FormMethod.Post之后,表单开始时的新{enctype=“multipart/form data”}
可以使用FormCollection方法


您也可以将其用于自己制作的数据库。

您可以使用FormCollection并处理键值对,但这不是一个优雅的解决方案。我建议使用一个独立的视图模型类,不同于您的
Iads.Elrams.Data.Entities.Page
,然后您可以使用类似AutoMapper的库来帮助您映射值。视图模型和数据库模型可能有很大的不同,通过设计不同的类(验证、自定义逻辑等),您可以获得更大的灵活性


在您的情况下,我将创建一个PageViewModel类,其中包含PageLanguageViewModel类的集合。此外,在视图中,我将使用“for(I=0;…)”循环,以便html输入扩展方法将为此集合创建适当的名称和ID。您的post参数将是PageViewModel类的一个实例。ASP.NET Mvc模型绑定也适用于集合类型。但是,在视图中动态删除或添加项时有一个技巧,因为您必须维护正确的索引

它是通过表单发布的吗?是的,它是通过管理控制面板中的表单发布的。默认的模型绑定器不应该处理这个问题吗?在这种情况下:公共操作结果编辑(Iads.Elrams.Data.Entities.Page)否,因为有x个页面文本(每种语言一个)。它处理的页面属性,但不用于页面文本列表。但如果我至少有两种可用语言,它们的名称和ID(Title和NavText)相同。那么我如何处理这些字段呢?如何读取这些字段?我没有在MVC中尝试过,但在经典的ASP中,具有相同标记的项目将作为数组进入页面。尝试通过formscollection访问。i、 e.集合[“标题”][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");
}
@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>
}