带有文件类型和文本的表单上的C#asp.net问题
我要直截了当地说伙计们 我有一张表格。当我保存表单时。。。它只获取firstname、middlename和lastname。。它没有得到文件。。。然而,如果我只得到照片和评论出其他输入。。。这张照片是在我的模型上拍摄的。。我不知道它为什么会这样。。我对asp.net mvc真的是个新手。。所以请容忍我带有文件类型和文本的表单上的C#asp.net问题,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我要直截了当地说伙计们 我有一张表格。当我保存表单时。。。它只获取firstname、middlename和lastname。。它没有得到文件。。。然而,如果我只得到照片和评论出其他输入。。。这张照片是在我的模型上拍摄的。。我不知道它为什么会这样。。我对asp.net mvc真的是个新手。。所以请容忍我 @model Impulse.ViewModels.AgentViewModel @{ ViewBag.Title = "AgentForm"; Layout = "~/Vie
@model Impulse.ViewModels.AgentViewModel
@{
ViewBag.Title = "AgentForm";
Layout = "~/Views/Shared/_SiteLayout.cshtml";
}
<div class="custom-container">
<h1 class="title"><strong>Add New Agent</strong></h1>
<hr />
@using (Html.BeginForm("Save", "Agent", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div class="row">
<div class="col-md-3">
<div id="preview">
<img src="~/Content/Assets/no-image.png" id="profile_image" class="img-thumbnail" />
</div>
<div class="form-group">
<label>Profile Picture</label>
<input type="file" name="photo" id="photo" />
</div>
</div>
<div class="col-md-9">
<div class="row">
<div class="col-md-4">
<div class="form-group">
@Html.LabelFor(m => m.Agent.FirstName)
@Html.TextBoxFor(m => m.Agent.FirstName, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Agent.FirstName)
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
@Html.LabelFor(m => m.Agent.MiddleName)
@Html.TextBoxFor(m => m.Agent.MiddleName, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Agent.MiddleName)
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group">
@Html.LabelFor(m => m.Agent.LastName)
@Html.TextBoxFor(m => m.Agent.LastName, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Agent.LastName)
</div>
</div>
</div>
</div>
</div>
<input type="submit" class="btn btn-primary" value="Save" />
}
</div>
型号
public class AgentModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string MiddleName { get; set; }
[FileSize(10240)]
[FileTypes("jpg,jpeg,png")]
public HttpPostedFileBase photo { get; set; }
}
public class UploadFileModel
{
public UploadFileModel()
{
Files = new List<HttpPostedFileBase>();
}
public List<HttpPostedFileBase> Files { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string MiddleName { get; set; }
}
public class AgentModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string MiddleName { get; set; }
[FileSize(10240)]
[FileTypes("jpg,jpeg,png")]
public HttpPostedFileBase photo { get; set; }
}
public class UploadFileModel
{
public UploadFileModel()
{
Files = new List<HttpPostedFileBase>();
}
public List<HttpPostedFileBase> Files { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string MiddleName { get; set; }
}
你可以这样试试
型号
public class AgentModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string MiddleName { get; set; }
[FileSize(10240)]
[FileTypes("jpg,jpeg,png")]
public HttpPostedFileBase photo { get; set; }
}
public class UploadFileModel
{
public UploadFileModel()
{
Files = new List<HttpPostedFileBase>();
}
public List<HttpPostedFileBase> Files { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string MiddleName { get; set; }
}
不。。。AgentView模型由AgentModel、ProvincesModel和CitiesModel组成。我还没有包括代理的一些信息。。但是我想我提供的数据就足够了,然后在您的操作方法中,将参数作为AgenViewModel传递。通过我建议的代码更改,让我知道它是否有效。我已经尝试使用Razor语法生成输入类型文件,现在它可以工作了。。谢谢你。。。AgentView模型由AgentModel、ProvincesModel和CitiesModel组成。我还没有包括代理的一些信息。。但是我想我提供的数据就足够了,然后在您的操作方法中,将参数作为AgenViewModel传递。通过我建议的代码更改,让我知道它是否有效。我已经尝试使用Razor语法生成输入类型文件,现在它可以工作了。。thanks@CRice谢谢你,但我尝试了
kevalsing
建议的方法,将输入文件设置为Razor格式,现在它捕获了。。。。。但我很好奇,为什么它在html格式上时不捕获…视图中的模型是AgentViewModel
,但您显示的模型是AgentModel
(不同)。我假设AgentViewModel
包含一个属性AgentModel Agent
(这是一个糟糕的做法-视图模型在编辑时不应该包含作为数据模型的属性),因此输入需要name=“Agent.photo”
假设POST方法是公共操作结果保存(AgentViewModel模型)
@CRice谢谢你,但我尝试了kevalsing
建议的方法,将输入文件制作成Razor格式,现在它捕获了。。。。。但我很好奇,为什么它在html格式上时不捕获…视图中的模型是AgentViewModel
,但您显示的模型是AgentModel
(不同)。我假设AgentViewModel
包含一个属性AgentModel Agent
(这是一个糟糕的做法-视图模型在编辑时不应该包含作为数据模型的属性),因此输入需要name=“Agent.photo”
假设POST方法是公共操作结果保存(AgentViewModel模型)
问题:为什么它不能与普通的输入类型文件一起工作?但是,当我将其更改为razor语法时,它可以工作。@SamTengWong,问题是您在视图中使用了与POST方法中的模型不同的模型,然后通过将POST方法参数的名称与您的model@StephenMuecke但是,AgentViewModel
只有这些属性<代码>公共代理模型代理{get;set;}
和城市和省份列表
。因此,当我实例化AgentViewModel
类时,代理的值与AgentModel
相同。@SamTengWong,如上所述,这是一种不好的做法-AgentViewModel
应该包含属性FirstName
,LastName
等,加上列表
等。请参考。@StephenMuecke另一个问题。。。建议只将AgentModel的属性继承到AgentViewModel,而我只在AgentViewModel上添加photo属性和省市列表吗?问题:为什么它不适用于普通的输入类型文件
?但是,当我将其更改为razor语法时,它可以工作。@SamTengWong,问题是您在视图中使用了与POST方法中的模型不同的模型,然后通过将POST方法参数的名称与您的model@StephenMuecke但是,AgentViewModel
只有这些属性<代码>公共代理模型代理{get;set;}和城市和省份列表
。因此,当我实例化AgentViewModel
类时,代理的值与AgentModel
相同。@SamTengWong,如上所述,这是一种不好的做法-AgentViewModel
应该包含属性FirstName
,LastName
等,加上列表
等。请参考。@StephenMuecke另一个问题。。。建议只将AgentModel的属性继承到AgentViewModel,我只在AgentViewModel上添加photo属性和省市列表吗?