Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.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#asp.net问题_C#_Asp.net_Asp.net Mvc - Fatal编程技术网

带有文件类型和文本的表单上的C#asp.net问题

带有文件类型和文本的表单上的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

我要直截了当地说伙计们

我有一张表格。当我保存表单时。。。它只获取firstname、middlename和lastname。。它没有得到文件。。。然而,如果我只得到照片和评论出其他输入。。。这张照片是在我的模型上拍摄的。。我不知道它为什么会这样。。我对asp.net mvc真的是个新手。。所以请容忍我

@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; }
}
  • 您正在绑定到AgentViewModel,以便在发布服务器时获得AgentViewModel。因此,保存操作的参数应该是viewmodel。或者更改视图以绑定到AgentModel
  • 您使用的文件控件是html输入类型。尝试使用下面的代码
  • @Html.TextBoxFor(m=>Model.File,新的{type=“File”,accept=“.pdf”}) @Html.ValidationMessageFor(m=>Model.File)

  • 您正在绑定到AgentViewModel,以便在发布服务器时获得AgentViewModel。因此,保存操作的参数应该是viewmodel。或者更改视图以绑定到AgentModel
  • 您使用的文件控件是html输入类型。尝试使用下面的代码
  • @Html.TextBoxFor(m=>Model.File,新的{type=“File”,accept=“.pdf”}) @Html.ValidationMessageFor(m=>Model.File)

    您可以这样尝试

    型号

    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属性和省市列表吗?