Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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
Asp.net mvc 如何使用视图模型作为控制器方法属性更新特定数据库条目_Asp.net Mvc_Database_Entity Framework_Linq_Asp.net Mvc Viewmodel - Fatal编程技术网

Asp.net mvc 如何使用视图模型作为控制器方法属性更新特定数据库条目

Asp.net mvc 如何使用视图模型作为控制器方法属性更新特定数据库条目,asp.net-mvc,database,entity-framework,linq,asp.net-mvc-viewmodel,Asp.net Mvc,Database,Entity Framework,Linq,Asp.net Mvc Viewmodel,我在我的网站上有一个连接到视图模型的输入表。在controller方法中,我将此视图模型传递给controller,反之亦然,这意味着controller使用数据库中的数据填充视图模型,并且视图返回一个填充了用户可能输入的表单数据的视图模型 问题在于,一旦视图接收到视图模型对象,来自数据库的“ID”属性就不再存在了。调用Post方法时,无法知道必须更新哪个数据库条目 我的问题是:当我将视图模型传递给控制器方法时,如何更新特定的数据库条目 控制器方法示例: [HttpPost] public Ac

我在我的网站上有一个连接到视图模型的输入表。在controller方法中,我将此视图模型传递给controller,反之亦然,这意味着controller使用数据库中的数据填充视图模型,并且视图返回一个填充了用户可能输入的表单数据的视图模型

问题在于,一旦视图接收到视图模型对象,来自数据库的“ID”属性就不再存在了。调用Post方法时,无法知道必须更新哪个数据库条目

我的问题是:当我将视图模型传递给控制器方法时,如何更新特定的数据库条目

控制器方法示例:

[HttpPost]
public ActionResult method(ViewModel vm)
{
    DataContext.Context.Where(x => x.ID == vm.Object.ID) // this is where vm.Object.ID always returns "0", not the actual ID from the database entry
    Context.SaveChanges();
    return View(vm);
}
如果你需要更多的信息,请告诉我。另外,对于这个项目来说,使用jquery不是一个可行的选择。非常感谢你的帮助

编辑:

视图:

@model MyANTon.ViewModels.Q4\u Answer\u VM
@{
ViewBag.Title=“myANTon Anforderungserfassung”;
ViewBag.HideNavBar=false;
}
@使用(Html.BeginForm())
{

编号。 最后 奎尔 齐尔 频率[h] 节选[m] @{int i=1;} @对于(var a=0;aModel.Matrix[a].Load) @Html.TextAreaFor(x=>Model.Matrix[a].Source) @Html.TextAreaFor(x=>Model.Matrix[a].Goal) @Html.TextAreaFor(x=>Model.Matrix[a].Frequency) @Html.TextAreaFor(x=>Model.Matrix[a].Distance) } }
获取方法:

    [HttpGet]
        public ActionResult Q_FourthPage()
        {
            // get current Questionnaire ID
            int CurrentQstID = Convert.ToInt32(Session["qstid"]);

            // create vm object. Capacity is a column in the table.
            var Q4ViewModel = new ViewModels.Q4_Answer_VM();

            // look for existing input data columns for this questionnaire in db
            if (db.Capacities.Any(x => x.Questionnaire_ID == CurrentQstID))
            {
                // answers exist
                Q4ViewModel.Matrix.AddRange(db.Capacities.Where(x => x.Questionnaire_ID == CurrentQstID));

            }
            else
            {
                // new capacity matrix
                Q4ViewModel.TMatrix = db.QuestionTexts.Where(x => x.ID == 21).FirstOrDefault();
                Q4ViewModel.Matrix = new List<Models.Capacity>();
            }

            var tmpcapacity = new Models.Capacity();
            tmpcapacity.Questionnaire_ID = Convert.ToInt32(Session["qstid"]);

            Q4ViewModel.Matrix.Add(tmpcapacity);
            db.Capacities.Add(tmpcapacity);
            db.SaveChanges();
            return View(Q4ViewModel);
        }
[HttpGet]
公共行动结果Q_第四页()
{
//获取当前问卷ID
int CurrentQstID=Convert.ToInt32(会话[“qstid]”);
//创建vm对象。容量是表中的一列。
var Q4ViewModel=newviewmodels.Q4_Answer_VM();
//在数据库中查找此问卷的现有输入数据列
if(db.capacity.Any(x=>x.ID==CurrentQstID))
{
//答案是存在的
Q4ViewModel.Matrix.AddRange(db.capacity.Where(x=>x.ID==CurrentQstID));
}
其他的
{
//新容量矩阵
Q4ViewModel.TMatrix=db.QuestionText.Where(x=>x.ID==21.FirstOrDefault();
Q4ViewModel.Matrix=新列表();
}
var tmpcapacity=新型号。容量();
tmpcapacity.inventory_ID=Convert.ToInt32(会话[“qstid”);
Q4ViewModel.Matrix.Add(tmpcapacity);
数据库容量。添加(TMP容量);
db.SaveChanges();
返回视图(Q4ViewModel);
}
张贴方法:

    [HttpPost]
        public ActionResult Q_FourthPage(ViewModels.Q4_Answer_VM vm)
        {
            int currentQst = Convert.ToInt32(Session["qstid"]);

            if (Request.Form["+"] != null)
            {

                var tmpcapacity = new Models.Capacity();
                tmpcapacity.Questionnaire_ID = currentQst;
                vm.Matrix.Add(tmpcapacity);

                db.Capacities.Add(tmpcapacity);
                db.SaveChanges();

                return View(vm);
            }

            if (Request.Form["Speichern"] != null)
            {
            // save data
                if (!ModelState.IsValid) return View("~/Views/Shared/Error.cshtml");

                var tmpcapacity = new Models.Capacity();

                for (var a = 0; a < vm.Matrix.Count; a++)
                {
                    var current = vm.Matrix[a];
                    current.ID = vm.Matrix[a].ID;
                    if (db.Capacities.Any(x => x.ID == current.ID))
                        // if clause never triggers true
                        // vm does not contain capacity ID
                    {
                        // column exists and is changed (or not)

                        tmpcapacity.Distance = vm.Matrix[a].Distance;
                        tmpcapacity.Frequency = vm.Matrix[a].Frequency;
                        tmpcapacity.Source = vm.Matrix[a].Source;
                        tmpcapacity.Goal = vm.Matrix[a].Goal;
                        tmpcapacity.Load = vm.Matrix[a].Load;
                        Models.Capacity c = db.Capacities.Where(x => x.ID == current.ID).FirstOrDefault();
                        c = tmpcapacity;
                        db.SaveChanges();

                    }
                    else
                    {
                        // new column
                        tmpcapacity.Distance = vm.Matrix[a].Distance;
                        tmpcapacity.Frequency = vm.Matrix[a].Frequency;
                        tmpcapacity.Source = vm.Matrix[a].Source;
                        tmpcapacity.Goal = vm.Matrix[a].Goal;
                        tmpcapacity.Load = vm.Matrix[a].Load;
                        tmpcapacity.Questionnaire_ID = currentQst;

                        db.Capacities.Add(tmpcapacity);
                        db.SaveChanges();
                    }

                }
                db.SaveChanges();
            }    
            return View(vm); 
        }
[HttpPost]
公共行动结果第四页(ViewModels.Q4\u Answer\u VM)
{
int currentQst=Convert.ToInt32(会话[“qstid”]);
if(Request.Form[“+”]!=null)
{
var tmpcapacity=新型号。容量();
tmpcapacity.inventory_ID=currentQst;
vm.Matrix.Add(tmpcapacity);
数据库容量。添加(TMP容量);
db.SaveChanges();
返回视图(vm);
}
if(Request.Form[“speichen”]!=null)
{
//保存数据
如果(!ModelState.IsValid)返回视图(“~/Views/Shared/Error.cshtml”);
var tmpcapacity=新型号。容量();
对于(var a=0;ax.ID==current.ID))
//if子句从不触发true
//vm不包含容量ID
{
//列存在且已更改(或未更改)
tmpcapacity.Distance=vm.Matrix[a]。距离;
tmpcapacity.Frequency=vm.Matrix[a]。频率;
tmpcapacity.Source=vm.Matrix[a].Source;
tmpcapacity.Goal=vm.Matrix[a].Goal;
tmpcapacity.Load=vm.Matrix[a].Load;
Models.Capacity c=db.Capacity.Where(x=>x.ID==current.ID).FirstOrDefault();
c=TMP能力;
db.SaveChanges();
}
其他的
{
//新专栏
tmpcapacity.Distance=vm.Matrix[a]。距离;
tmpcapacity.Frequency=vm.Matrix[a]。频率;
tmpcapacity.Source=vm.Matrix[a].Source;
tmpcapacity.Goal=vm.Matrix[a].Goal;
tmpcapacity.Load=vm.Matrix[a].Load;
tmpcapacity.inventory_ID=currentQst;
数据库容量。添加(TMP容量);
db.SaveChanges();
}
}
db.SaveChanges();
}    
返回视图(vm);
}
如果要“保存”对象ID并在post发生时将其取回,则需要将其存储到
    [HttpPost]
        public ActionResult Q_FourthPage(ViewModels.Q4_Answer_VM vm)
        {
            int currentQst = Convert.ToInt32(Session["qstid"]);

            if (Request.Form["+"] != null)
            {

                var tmpcapacity = new Models.Capacity();
                tmpcapacity.Questionnaire_ID = currentQst;
                vm.Matrix.Add(tmpcapacity);

                db.Capacities.Add(tmpcapacity);
                db.SaveChanges();

                return View(vm);
            }

            if (Request.Form["Speichern"] != null)
            {
            // save data
                if (!ModelState.IsValid) return View("~/Views/Shared/Error.cshtml");

                var tmpcapacity = new Models.Capacity();

                for (var a = 0; a < vm.Matrix.Count; a++)
                {
                    var current = vm.Matrix[a];
                    current.ID = vm.Matrix[a].ID;
                    if (db.Capacities.Any(x => x.ID == current.ID))
                        // if clause never triggers true
                        // vm does not contain capacity ID
                    {
                        // column exists and is changed (or not)

                        tmpcapacity.Distance = vm.Matrix[a].Distance;
                        tmpcapacity.Frequency = vm.Matrix[a].Frequency;
                        tmpcapacity.Source = vm.Matrix[a].Source;
                        tmpcapacity.Goal = vm.Matrix[a].Goal;
                        tmpcapacity.Load = vm.Matrix[a].Load;
                        Models.Capacity c = db.Capacities.Where(x => x.ID == current.ID).FirstOrDefault();
                        c = tmpcapacity;
                        db.SaveChanges();

                    }
                    else
                    {
                        // new column
                        tmpcapacity.Distance = vm.Matrix[a].Distance;
                        tmpcapacity.Frequency = vm.Matrix[a].Frequency;
                        tmpcapacity.Source = vm.Matrix[a].Source;
                        tmpcapacity.Goal = vm.Matrix[a].Goal;
                        tmpcapacity.Load = vm.Matrix[a].Load;
                        tmpcapacity.Questionnaire_ID = currentQst;

                        db.Capacities.Add(tmpcapacity);
                        db.SaveChanges();
                    }

                }
                db.SaveChanges();
            }    
            return View(vm); 
        }
@using (Html.BeginForm())
{
    @Html.HiddenFor(m => m.Object.Id);

    <div class="container">
        <div class="jumbotron">
@using (Html.BeginForm("method", "ControllerName", FormMethod.Post))
{
@Html.HiddenFor(Model=>Model.ID)

<div class="form-group">
    @Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" })
    <div class="col-md-10">
        @Html.TextBoxFor(m => m.Email, new { @class = "form-control" })
    </div>
</div>
<div class="form-group">
    <div class="col-md-offset-2 col-md-10">
        <input type="submit" class="btn btn-default" value="Button" />
    </div>
</div>
}