我正在開發asp.net mvc 3應用程序。我實現了一個剃鬚刀視圖,它具有兩個主要功能 - 基於數據庫中的數據構建/顯示錶單,並在自定義(由我製作)圖像庫中顯示與此表單相關的圖像,該圖像庫允許上傳和刪除圖片。根據控制器方法的執行結果在剃刀視圖中顯示消息
所以通常這是我與兩種形式用於可視化的形式,並且顯示和上傳圖像(多個)視圖:
@model List<DataAccess.MCS_DocumentFields>
@{
ViewBag.Title = "Документ";
}
<div id="alabala">
<div id="drawForm">
@using (Html.BeginForm("UpdateDocument", "Forms", FormMethod.Post))
{
<table border="1" id="drawDocument">
<colgroup>
<col span="1" style="width: 10%;" />
<col span="1" style="width: 40%;" />
<col span="1" style="width: 25%;" />
<col span="1" style="width: 25%;" />
</colgroup>
@Html.Partial("_PartialHeader", Model)
@Html.Partial("_PartialDrawing", Model)
@Html.Partial("_PartialBody", Model)
@Html.Partial("_PartialFooter", Model)
</table>
if (ViewBag.Status == 1)
{
<button type="submit" id="submitDocument">Запази</button>
<button style="float:right;" id="finalizeDocument">Приключи</button>
}
else
{
@Html.ActionLink("Назад", "Index")
}
}
</div>
<div id="imageContainer">
<div id="imageGallery" style="overflow: scroll">
<img src="file:\\..." alt="docImg" style="width: 190px; height: auto"/>
@Ajax.ActionLink("Delete", "DeletePicture", new { documentID = Model[0].Id },
new AjaxOptions
{
Confirm = "Are you sure?",
OnComplete = "$('#blah').attr('src', '#').attr('style', 'display:none;'); $('#Image1').attr('src', '#').attr('style', 'display:none;'); $('#DelPic').attr('style', 'display:none;');"
})
<img src="file:\\..." alt="docImg" style="width: 190px; height: auto"/>
@Ajax.ActionLink("Delete", "DeletePicture", new { documentID = Model[0].Id },
new AjaxOptions
{
Confirm = "Are you sure?",
OnComplete = "$('#blah').attr('src', '#').attr('style', 'display:none;'); $('#Image1').attr('src', '#').attr('style', 'display:none;'); $('#DelPic').attr('style', 'display:none;');"
})
</div>
@using (Html.BeginForm("Upload", "Forms", FormMethod.Post))
{
<input [email protected][0].DocumentId type="hidden" />
<input type="file" name="datafile" id="file" onchange="readURL(this);" />
<input type="button" name="Button" value="Upload" id="UploadButton" onclick="fileUpload(this.form,'/forms/upload','upload'); return false;"/>
<div id="upload" style="display: inline-block;">
<img id="blah" src="#" alt="your image" style="display:none;"/>
</div>
}
</div>
</div>
第一種形式是其中I示出了用於當前表單/文檔,並且因爲數據他們是可編輯的我有提交按鈕。我需要第二種形式將選定的圖片提交給我的控制器,並在那裏執行業務邏輯。
因此,一旦照片被選中,Upload
按鈕被點擊我讓我的控制器:
public ActionResult Upload(FormCollection collection)
{
WebImage UploadImage = WebImage.GetImageFromRequest();
long documentID;
string finalImageName = null;
if (!long.TryParse(collection.AllKeys[0], out documentID))
//More code...
在那裏我的形象和它屬於和我需要的是執行文件的ID一些檢查/驗證,最後將選定的圖像隱藏到專用目錄並將名稱保存到數據庫中。
的問題是,我已經寫除了一個將顯示像不同的輸出正確的消息的所有邏輯:
if (imagePath.Length > 247)
{
//TODO message that the path is too long
//TODO this return View() is temp, replace with something suitable
return View();
}
//...
System.IO.File.Copy(UploadImage.FileName, imagePath);
}
catch (Exception ex)
{
//TODO copy failed return message
return View();
}
//...
這些是在相同的方法和執行中的所有不同的輸出我想爲每一個人展示一個正確的信息。我不確定的是,如果我仍然可以選擇保存我的工作並仍然執行消息邏輯?現在看來,如果我以某種形式使用Ajax,現在看起來會容易很多,但我不是。我能想到的唯一想法就是創建ViewBag
屬性,並將其與模型一起返回到視圖中,以檢查不同的屬性,並根據需要顯示一些消息,但這意味着在我的視圖中有很多額外的邏輯,重新發送我已經在我的視圖中顯示的數據庫中的數據,簡而言之,我認爲這是一種糟糕的編程,但也許我已經將自己納入了這一工作。那麼從這裏開始最好的行動是什麼?是否最好只刪除我的代碼,並尋找一種方法來與AJAX做到這一點?
嗯,說實話我真的不喜歡的'ViewBag'選項,但如果它是最好的...... – Leron
你並不需要一個ViewBag,這只是爲了說明,你可以將「Message」屬性添加到您應該使用的UpdateDocumentModel上。 – CodingIntrigue