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
C# 控制器的一个参数';s的POST方法未填充,为什么?_C#_Asp.net Mvc_Post_Model View Controller - Fatal编程技术网

C# 控制器的一个参数';s的POST方法未填充,为什么?

C# 控制器的一个参数';s的POST方法未填充,为什么?,c#,asp.net-mvc,post,model-view-controller,C#,Asp.net Mvc,Post,Model View Controller,我正试图通过BeginForm/TextboxFor和httppost设置模型的所有三个对象。表单的前两个参数起作用,但由于某种原因,最后一个参数不起作用,并且没有填充我输入到文本框中的任何值 我的控制器中的ActionResult: [HttpPost] public ActionResult UpdateClient(HttpPostedFileBase UploadedVideo, Workout workout, WorkoutInputs workoutInputs) { if

我正试图通过BeginForm/TextboxFor和httppost设置模型的所有三个对象。表单的前两个参数起作用,但由于某种原因,最后一个参数不起作用,并且没有填充我输入到文本框中的任何值

我的控制器中的ActionResult:

[HttpPost]
public ActionResult UpdateClient(HttpPostedFileBase UploadedVideo, Workout workout, WorkoutInputs workoutInputs)
{
   if (Request.IsAuthenticated)
   {
       if (User.IsInRole("Admin"))
       {
          WorkoutViewModel workoutViewModel = new WorkoutViewModel();
          workoutViewModel.Clients = GetClients();
          int client_id = workout.ClientId ?? default(int);
          workoutViewModel.Client = GetClient(client_id);

          if (UploadedVideo.ContentLength > 0)
          {
             string VideoFilename = Path.GetFileName(UploadedVideo.FileName);
             FilePath = Path.Combine(Server.MapPath("~/UploadedClientVideos"), VideoFilename);
             UploadedVideo.SaveAs(FilePath);
             ViewBag.Message = "Video and data saved successfully.";
             try
             {
                using (OPPDBContext context = new OPPDBContext())
                {
                   List<WorkoutInputs> lst = context.WorkoutInputs.ToList();

                   workoutInputs.link = "/UploadedClientVideos/" + VideoFilename;
                   workoutInputs.Id = lst[lst.Count - 1].Id + 1;
                   workoutInputs.WorkoutId = workout.workout_id;
                   context.WorkoutInputs.Add(workoutInputs);
                   context.SaveChanges();
                }
             }
             catch (Exception ex)
             {
                throw ex;
             }
          }
          // return RedirectToAction("Index", new { id  = workout.ClientId});


          workoutViewModel.Clients = GetClients();
          workoutViewModel.Weeks = GetWeeks(client_id);
          workoutViewModel.Workouts = GetWorkouts(client_id);
          workoutViewModel.workout = workout;
          workoutViewModel.WorkoutInput = workoutInputs;

          return RedirectToAction("Index", "Workouts", new { id = client_id });
       }
       else
          return RedirectToAction("AccessDenied", "Error");
       }
       return RedirectToAction("AccessDenied", "Error");
    }
[HttpPost]
public ActionResult UpdateClient(HttpPostedFileBase上载视频、训练训练、训练输出训练输出)
{
如果(请求已验证)
{
if(User.IsInRole(“Admin”))
{
WorkoutViewModel WorkoutViewModel=新的WorkoutViewModel();
workoutViewModel.Clients=GetClients();
int client_id=workout.ClientId??默认值(int);
workoutViewModel.Client=GetClient(客户端id);
如果(UploadedVideo.ContentLength>0)
{
字符串VideoFilename=Path.GetFileName(上传的video.FileName);
FilePath=Path.Combine(Server.MapPath(“~/UploadedClientVideos”),VideoFilename);
上传的video.SaveAs(文件路径);
ViewBag.Message=“视频和数据已成功保存。”;
尝试
{
使用(OPPDBContext=new OPPDBContext())
{
List lst=context.WorkoutInputs.ToList();
workoutInputs.link=“/UploadedClientVideos/”+视频文件名;
Id=lst[lst.Count-1].Id+1;
workoutInputs.WorkoutId=workout.workout\u id;
context.WorkoutInputs.Add(WorkoutInputs);
SaveChanges();
}
}
捕获(例外情况除外)
{
掷骰子;
}
}
//返回RedirectToAction(“Index”,new{id=workout.ClientId});
workoutViewModel.Clients=GetClients();
workoutViewModel.Weeks=GetWeeks(客户端id);
workoutViewModel.Workouts=GetWorkouts(客户端id);
workoutViewModel.workout=训练;
workoutViewModel.WorkoutInput=workoutInputs;
返回重定向操作(“索引”、“训练”,新的{id=client_id});
}
其他的
返回重定向操作(“拒绝访问”、“错误”);
}
返回重定向操作(“拒绝访问”、“错误”);
}
上传的视频和训练参数已填充,但workoutInput未填充

视图的代码:

<td>
@using (Html.BeginForm("UpdateClient", "Workouts", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
   <label>Weight Lifted: </label>
   @Html.TextBoxFor(m => m.WorkoutInput.Weight, new { @Value = workoutInput.Weight, @class = "form-control" })


   <label>Notes: </label>
   @Html.TextBoxFor(m => m.WorkoutInput.Notes, new { @Value = workoutInput.Notes, @class = "form-control" })
   @Html.TextBox("UploadedVideo", "", new { type = "file" })


   @Html.TextBoxFor(m => m.workout.workout_id, new { @Value = workoutId, @class = "hidden" })
   @Html.TextBoxFor(m => m.workout.ClientId, new { @Value = clientId, @class = "hidden" })

   <input type="submit" value="Update" />
}

@使用(Html.BeginForm(“UpdateClient”、“Workouts”、FormMethod.Post、new{enctype=“multipart/formdata”}))
{
举重:
@TextBoxFor(m=>m.WorkoutInput.Weight,新的{@Value=WorkoutInput.Weight,@class=“form control”})
笔记:
@TextBoxFor(m=>m.WorkoutInput.Notes,新的{@Value=WorkoutInput.Notes,@class=“form control”})
@TextBox(“UploadedVideo”,new{type=“file”})
@Html.TextBoxFor(m=>m.workout.workout_id,新的{@Value=workoutId,@class=“hidden”})
@TextBoxFor(m=>m.workout.ClientId,新的{@Value=ClientId,@class=“hidden”})
}

视图的模型:

public class WorkoutViewModel
{
    public List<Workout> Workouts { get; set; }
    public Client Client { get; set; }
    public Workout workout { get; set; }
    public List<Week> Weeks { get; set; }
    public List<Client> Clients { get; set; }
    public List<Message> Messages { get; set; }
    public Program Program { get; set; }
    public Chat Chat { get; set; }
    public Message Message { get; set; }
    public List<WorkoutInputs> WorkoutInputs { get; set; }
    public WorkoutInputs WorkoutInput { get; set; }
}
公共类WorkoutViewModel
{
公开列表训练{get;set;}
公共客户端{get;set;}
公共锻炼计划{get;set;}
公共列表周{get;set;}
公共列表客户端{get;set;}
公共列表消息{get;set;}
公共程序程序{get;set;}
公共聊天{get;set;}
公共消息{get;set;}
公共列表{get;set;}
public workutinputs workutinput{get;set;}
}

PS:我已经尝试了隐藏字段。

除了上传的文件外,我将尝试只接受一个附加参数。 例如,您可以创建另一个包含两个当前模型作为属性的模型

编辑:详细说明一下:在没有验证的情况下,我对ASP.NET的理解是,控制器通常将输入从一个源绑定到一个输入参数。
如果控制器处于活动状态,则可以通过访问请求属性来访问各个字段。

通过使用WorkoutViewModel作为第三个参数,WorkoutViewModel类的WorkoutInput值已成功填充。

为什么属性UploadedVideo不在您的ViewModel中?为什么你要用@Html.TextBox(“UploadedVideo”,“”,new{type=“file”})来代替@Html.TextBox,哪一个是属性绑定的?我不知道,它是有效的。。。真的需要改变吗?你试过使用WorkoutViewModel作为参数吗?@ColbyBoren有效!为什么会出现我的问题?