【解決方法】画像をアップロードして MVC 、 sqlserver 2008 ストアド プロシージャを使用してフォルダに保存するにはどうすればよいですか

プログラミングQA

[ad_1]

皆さんこんにちは、

他の詳細とともに画像をアップロードしようとしていますが、このエラーが発生します:-

C#
String[4]: the Size property has an invalid size of 0.

ストアド プロシージャは次のとおりです。

SQL
ALTER proc [dbo].[spInsertPageDetail]
@Heading varchar(100),
@Body varchar(2000),
@Img varchar(100),
@PageName varchar(50),
@output char(1) output
As
Begin Transaction

set @output='F'

if(@PageName='WhyUsCreate')
Begin
	set @output='T'
	Insert into TblWhyUs(Heading,Body,Img) values (@Heading,@Body,@Img)
	if(@@error<>0)
	Begin
		rollback transaction
		return 0
	End	
End

if(@PageName='ProductCreate')
Begin
	set @output='T'
	Insert into TblProduct(Heading,Body,Img) values (@Heading,@Body,@Img)
	if(@@error<>0)
	Begin
		rollback transaction
		return 0
	End	
End

if(@PageName='SensorCreate')
Begin
	set @output='T'
	Insert into TblSensor(Heading,Body,Img) values (@Heading,@Body,@Img)
	if(@@error<>0)
	Begin
		rollback transaction
		return 0
	End	
End


commit
return 1
C#
My Model Is:-

namespace RsbEngMvc.Models
{
    [Table("TblWhyUs")]
    public class WhyUs
    {
        public int ID { get; set; }
        [Required]
        public string Heading { get; set; }
        [Required]
        public string Body { get; set; }
        [Display (Name="Image")]
        public string Img { get; set; }
    }
}

私が試したこと:

私のコントローラーは:-

public void Create(文字列の見出し、文字列の本文、文字列の画像、文字列のページ名)
{
文字列 ConnectionString = ConfigurationManager.ConnectionStrings[“RsbEnggContext”].接続文字列;

using (SqlConnection con = new SqlConnection(ConnectionString))
{
SqlCommand SqlCmdCreate = new SqlCommand(“spInsertPageDetail”, con);
SqlCmdCreate.CommandTimeout = 0;
SqlCmdCreate.CommandType = CommandType.StoredProcedure;

SqlParameter SqlParamHeading = new SqlParameter(“@Heading”, System.Data.SqlDbType.VarChar, 100);
SqlParameter SqlParamBody = new SqlParameter(“@Body”, System.Data.SqlDbType.VarChar, 2000);
SqlParameter SqlParamImg = new SqlParameter(“@Img”, System.Data.SqlDbType.VarChar, 100);
SqlParameter SqlParamPageName = new SqlParameter(“@PageName”, System.Data.SqlDbType.VarChar, 50);
SqlParameter SqlParamOutput = new SqlParameter(“@Output”, System.Data.SqlDbType.Char);
SqlParamOutput.Direction = ParameterDirection.Output;

SqlCmdCreate.Parameters.Add(SqlParamHeading);
SqlCmdCreate.Parameters.Add(SqlParamBody);
SqlCmdCreate.Parameters.Add(SqlParamImg);
SqlCmdCreate.Parameters.Add(SqlParamPageName);
SqlCmdCreate.Parameters.Add(SqlParamOutput);

SqlParamHeading.Value = Heading.Trim();
SqlParamBody.Value = Body.Trim();
SqlParamImg.Value = Img.Trim();
SqlParamPageName.Value = PageName.Trim();

con.Open();
int 結果 = SqlCmdCreate.ExecuteNonQuery();

if (SqlCmdCreate.Parameters[“@Output”].Value.ToString() == “F”)
{
Response.Write(“そのようなページはデータベースに存在しません。サポートに連絡してください!!”);
}

そうしないと
{
もし (結果 > 0)
{
RedirectToAction(“AdminWhyUs”);
}

そうしないと
{
RedirectToAction(“エラー”);
}
}
}
}

private bool IsValid(文字列ユーザー名、文字列パスワード)
{
bool IsValid = false;

使用 (var db = new RsbEngMvc.Models.RsbEnggContext())
{
var user = db.login.FirstOrDefault(u => u.AdminUserName == UserName);

if (ユーザー != null)
{
if (user.AdminPassword == パスワード)
{
IsValid = 真;
}
}
}

IsValid を返します。
}

[HttpGet]

public ActionResult AdminWhyUs()
{
文字列 ConnectionString = ConfigurationManager.ConnectionStrings[“RsbEnggContext”].接続文字列;
List whyuss = new List();

using (SqlConnection con = new SqlConnection(ConnectionString))
{
con.Open();
SqlCommand SqlCmdList = new SqlCommand(“TblWhyUs から ID、見出し、本文、画像を選択”, con);
SqlCmdList.CommandTimeout = 0;
SqlDataReader SqlDrList = SqlCmdList.ExecuteReader();

while (SqlDrList.Read())
{
WhyUs Whyusobj = new WhyUs();
whyusobj.ID = Convert.ToInt32(SqlDrList[“ID”]);
whyusobj.Heading = SqlDrList[“Heading”].ToString();
whyusobj.Body = SqlDrList[“Body”].ToString();
whyusobj.Img = SqlDrList[“Img”].ToString();
Whyuss.Add(whyusobj);
}

ビューを返します(理由);
}

}

[HttpGet]
[ActionName(“AdminWhyUsCreate”)]

public ActionResult AdminWhyUsCreate_Get()
{
ビューを返します();
}

[HttpPost]
[ActionName(“AdminWhyUsCreate”)]

public ActionResult AdminWhyUsCreate_Post(FormCollection formCollection,HttpPostedFileBase ファイル)
{
if (ModelState.IsValid)
{

WhyUs whyuss = new WhyUs();

if (ファイル != null)
{
file.SaveAs(HttpContext.Server.MapPath(“~/Images/”) + file.FileName);
//Whyuss.Img = file.FileName;
}
//RsbEnggContext DbContext = new RsbEnggContext();
//DbContext.whyus.Add(whyuss);
//DbContext.SaveChanges();

文字列見出し = formCollection[“Heading”];
文字列本体 = formCollection[“Body”];
string Img = Convert.ToString(file.FileName);
string PageName = “WhyUsCreate”;

Create(Heading, Body,Img, PageName);

return RedirectToAction(“AdminWhyUs”);
}

ビューを返します();
}

}

私の見解は:-

WhyUs ページの作成

@*@using (Html.BeginForm())*@
@using (Html.BeginForm(“AdminWhyUsCreate”, “MyAdmin”, FormMethod.Post, new { enctype = “multipart/form-data” }))
{

@Html.AntiForgeryToken()
@Html.ValidationSummary(真)

WhyUs に新しいエントリを作成する

@Html.LabelFor(モデル => モデル.見出し)

@Html.TextBoxFor(model => model.Heading, new { @class = “form-control” })
@Html.ValidationMessageFor(モデル => モデル.見出し)

@Html.LabelFor(モデル => モデル.ボディ)

@Html.TextAreaFor(model => model.Body, new { @class = “form-control”, @rows = 5 })
@Html.ValidationMessageFor(モデル => モデル.ボディ)

@Html.LabelFor(モデル => モデル.Img)

@*@Html.EditorFor(モデル => モデル.Img)*@
@*@using (Html.BeginForm(“Upload”, “Upload”, FormMethod.Post, new { cssclass = “btn btn-info”, enctype = “multipart/form-data” })))*@
{

@Html.ValidationMessageFor(モデル => モデル.Img)
}

}

@Html.ActionLink(“リストに戻る”, “AdminWhyUs”)

作成ボタンをクリックするたびに、エラーが発生します:-

弦[4]: Size プロパティのサイズが無効な 0 です。

解決策 1

最後に私は解決策を見つけました:-

コントローラー:-

C#
public ActionResult AdminProductCreate_Post(Product products, HttpPostedFileBase file)
       {
           if (ModelState.IsValid)
           {
               if (file != null)
               {
                   file.SaveAs(HttpContext.Server.MapPath("~/Images/") + file.FileName);
                   products.Img = file.FileName;
               }


               RsbEnggContext DbContext = new RsbEnggContext();
               DbContext.product.Add(products);
               DbContext.SaveChanges();

               return RedirectToAction("AdminProduct");
           }

           return View();
       }

そして見る: –

HTML
<div class="container">
    <h2 style="color:yellowgreen"><b>Create for Product Page</b></h2>

    @using (Html.BeginForm("AdminProductCreate", "MyAdmin", FormMethod.Post, new { enctype = "multipart/form-data" }))
    {
        @Html.AntiForgeryToken()
        @Html.ValidationSummary(true)

        <fieldset>
            <legend>Create New Entry in Products</legend>

            <div class="editor-label">
                @Html.LabelFor(model => model.Heading)
            </div>
            <div class="editor-field">
                @Html.TextBoxFor(model => model.Heading, new { @class = "form-control", maxlength = "100" })
                @Html.ValidationMessageFor(model => model.Heading, "", new { @class = "label label-danger" })
            </div>

            <div class="editor-label">
                @Html.LabelFor(model => model.Body)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Body, new { @class = "form-control", @rows = 5, maxlength = "3000" })
                @Html.ValidationMessageFor(model => model.Body, "", new { @class = "label label-danger" })
            </div>

            <div class="editor-label">
                @Html.LabelFor(model => model.Img)
            </div>
            <div class="editor-field">
                <input type="file" id="FileUpload" name="file" />
            </div>

            <p>
                <input type="submit" value="Create" class="btn btn-dark" />
            </p>
        </fieldset>
    }

    <div>
        @Html.ActionLink("Back to List", "AdminProduct")
    </div>

解決策 2

fdfgghgb
qwertyuioplkjjhgfdsazxcvbnm

[ad_2]

コメント

タイトルとURLをコピーしました