C# 控制器的一个参数';s的POST方法未填充,为什么?
我正试图通过BeginForm/TextboxFor和httppost设置模型的所有三个对象。表单的前两个参数起作用,但由于某种原因,最后一个参数不起作用,并且没有填充我输入到文本框中的任何值 我的控制器中的ActionResult: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
[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有效!为什么会出现我的问题?