0

入力要素に編集用のイベントプロパティが入力されているイベントデータモデルの編集フォームを作成しています。フィールドへの入力とページのフォーマットを終えた後、フォームタグを忘れていたことに気づきました。それらを追加した後、私のRazorコードは完全に機能を停止し、すべての入力要素を空のままにします。すべてのjavascriptとcssを含むコードのさまざまな部分を無効にしようとしましたが、フォームタグを削除する以外にフィールドに再入力するものはないようです。

コードは次のとおりです。

@model Objects.Models.Event.Event

@using EventSignup.Extensions

@{
    ViewBag.Title = "Edit";
}

<script src="@Url.Content("~/Scripts/jquery-ui-1.8.22.min.js")" type="text/javascript"></script>
<link href="@Url.Content("~/Content/themes/base/jquery.ui.all.css")" rel="stylesheet" type="text/css" />
<script src="@Url.Content("~/Javascript/jquery-ui-timepicker-addon.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Javascript/Edit.js")" type="text/javascript" ></script>

<h2>Edit</h2>

<div class="hero-unit">
<form action="" id="event_form" method="post">
    <label for="name">Event Name:</label>
    <input type="text" name="name" id="name" value="@Model.EventName" /><br />

    <label for="tickets"># of Tickets:</label>
    <input type="text" name="tickets" id="tickets" value="@Model.Tickets" /><br />

    <label for="location">Location:</label>
    <select name="location" id="location">        
        @foreach (var Element in ViewBag.Buildings as List<EventSignup.ViewModels.SelectElement>)
        {
            <option value="@Element.ID" @((Model.TicketsLocation.ID == @Element.ID) ? "selected='selected'" : "")>@Element.DisplayName</option>
        }
    </select><br />

    <label for="dates">Dates/Times:</label>
    @foreach (var EventInfo in Model.Dates)
    {
        <input type="text" class="date" name="dates" id="dates@(Model.Dates.IndexOf(EventInfo)+1)" value="@EventInfo.DateTime.ToDateTimePickerString()"/><br />
        if (EventInfo != Model.Dates.Last())
        {
            <label></label>
        }
    }
    <div id="date_inputs">
    </div>
    <label></label>
    <span id="new_date" class="fauxlink" onclick="newDate()">New Date/Time</span><br /><br />
    <input type="hidden" id="num_dates" value="@Model.Dates.Count" />

    <input type="submit" id="submit" value="Submit" /><br />
</form>
</div>
4

2 に答える 2

9

フォーム要素を直接使用しないでくださいBeginForm-HTMLヘルパーを使用してください:

@using (Html.BeginForm())
{

}

また、さまざまなモデルプロパティにテンプレートエディタを使用する必要があります。

@Html.EditorFor(model => model.EventName)

アップデート:

"私は通常、マークアップが有効でない場合(属性の最後に欠落している、適切に閉じられていない要素など)、Visual Studio / Razorが機能しなくなる(たとえば、インテリセンスがない)ことに気付きます。マークアップを注意深くチェックして、そのようなエラーがどこにあるかを確認してください。

于 2012-08-07T13:18:43.507 に答える
1

通常の html タグの代わりに Asp.net mvc 3 ヘルパーを使用してフォームを作成し、モデルに基づいてフォームを作成することを検討する必要があります。これにより、フォーム入力もエンコードされ、AntiFrogery トークンを検証できるようになります。

@using (Html.BeginForm("actionhere", ..other arguments))
{
    @Html.DropDownFor(x => x.ModelProperty, Model.List);
}
于 2012-08-07T13:21:34.893 に答える