問題は、同じビューに 2 つのフォームがあることです。コントローラーはUsers
、2 つのフォームに対して 2 つのアクションがあります。Edit と UploadPhoto です。
編集部分をしばらく使用していますが、機能しています。ここで、ユーザーが同じページに写真をアップロードできるようにしたいと考えています。ユーザー情報を保存するためのボタンと、写真を保存するための別のボタンがあります。
ページモデルは@model sportingbiz.Models.ViewModels.UserEditViewModel
第二形態
<fieldset title="Upload photo">
<legend>Change Profile Picture</legend>
<div>
@using(Html.BeginForm("UploadPhoto", "Users", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<table>
<tr>
<td>
<img src="@Url.Content("~/Content/images/noprofilepic.jpg")"
</td>
<td>
<input type="file" name="photoFile" />
<br /><br />
<input type="submit" value="Upload" />
</td>
</tr>
</table>
}
</div>
</fieldset>
コントローラ
public class UsersController : Controller
{
UsersRepository usersRepo = new UsersRepository();
[Authorize]
[HttpPost]
public void UploadPhoto(HttpPostedFile photoFile)
{
if (photoFile == null)
{
return;
}
if (photoFile.ContentLength <= 0)
{
return;
}
string filename = Path.GetFileName(photoFile.FileName);
if (Path.GetExtension(filename) == "")
return;
}
}
アップロードをクリックすると、ページがhttp://localhost/mvcapp/Users/UploadPhoto
空白の画面に移動します。私が望むのは、編集ページに戻り、ファイルがアップロードされていないというエラーをユーザーに表示することです。ModelState.IsValid
またはのような機能ModelState.AddModelError
return View(model) など、同じビューを返すオプションもありません。
私はこれを間違った方法でやっていますか?Ajax アップローダまたはアップローダを使用することをお勧めします。フォームを分離して、アップロード部分を独自のビューにすることも考えています。この点で PartialView は役に立ちますか